Странная ошибка при вызове document.GetElementsByTagName ("head") - PullRequest
1 голос
/ 16 марта 2011

У меня есть приложение, которое использует следующий код для вставки JavaScript в веб-страницу в WebBrowser:

HtmlElement head = document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = document.CreateElement("script"); 
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; 
element.text = CurrentFuncs; 
head.AppendChild(scriptEl); 

Но я только что получил сообщение об ошибке от клиента, который получил исключение вdocument.GetElementsByTagName("head")[0] фрагмент кода, который говорит: «Значение« 0 »недопустимо для« индекса ».« Индекс »должен быть между 0 и -1».Я почти уверен, что это из-за [0] в этой строке кода, но не знаю почему.

Я полагаю, это потому, что нет элемента "head".Я просто загрузил страницу без головы и открыл ее с моим приложением, но ошибка не воспроизводилась.WebBrowser автоматически добавляет элемент "head".Я даже попытался загрузить файл ".txt", но все равно не ошибся.Любая идея, почему это могло произойти или как я могу воспроизвести ошибку?

К сожалению, я не знаю, на какой веб-странице произошла ошибка.

1 Ответ

1 голос
/ 16 марта 2011

Я подозреваю, что ваш код выглядит так:

string url = "http://www.google.com";
webBrowser1.Navigate(url);
HtmlDocument document = webBrowser1.Document;
HtmlElement head = document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = document.CreateElement("script");
mshtml.IHTMLScriptElement element = (mshtml.IHTMLScriptElement)scriptEl.DomElement;
element.text = "alert('1');";
head.AppendChild(scriptEl);

Проблема в том, что сразу после навигации документ еще не загружен. Вам нужно будет переместить часть кода, которая обращается к документу, в обработчик DocumentCompleted.

private void Go()
{
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
    string url = "http://www.google.com";
    webBrowser1.Navigate(url);
}
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    HtmlDocument document = webBrowser1.Document;
    HtmlElement head = document.GetElementsByTagName("head")[0];
    HtmlElement scriptEl = document.CreateElement("script");
    mshtml.IHTMLScriptElement element = (mshtml.IHTMLScriptElement)scriptEl.DomElement;
    element.text = "alert('1');";
    head.AppendChild(scriptEl);
    // Code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...