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

时间:2011-03-16 04:58:43

标签: c# .net browser

我有一个应用程序使用以下代码在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]代码中得到一个异常,说:“'0'的值对'index'无效。'index'应介于两者之间0和-1。“我很确定这是来自代码行中[0]的东西,但不知道为什么。

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

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

1 个答案:

答案 0 :(得分:1)

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

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
}
相关问题