调用document.GetElementsByTagName(“head”)时出现奇怪的错误

我有一个应用程序,它使用以下代码在WebBrowser网页中注入JavaScript:

 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]中遇到exceptiondocument.GetElementsByTagName("head")[0]代码段说:“’0’的值对’index’无效。’index’应该介于0和-1之间。“ 我很确定这是来自那行代码中的[0] ,但不知道为什么。

我假设是因为没有“头”元素。 我刚上传了一个没有头的页面并用我的应用程序打开它,但是错误没有重现。 WebBrowser自动添加“head”元素。 我甚至尝试上传“.txt”文件但仍然没有错误。 知道为什么会发生这种情况或者如何重现错误?

不幸的是,我不知道错误发生在哪个网页上。

我怀疑你的代码是这样的:

 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); 

问题是在Navigate之后,文档尚未加载。 您需要将访问该文档的代码部分移动到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 }