2011-03-16 48 views
1

时奇怪的错误我有一个使用下面的代码中插入JavaScript的网页应用程序中的WebBrowser调用document.GetElementsByTagName(“头”)

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自动添加“头”元素。我甚至尝试上传一个“.txt”文件,仍然没有错误。任何想法为什么会发生这种情况,或者我怎么能重现错误?

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

回答

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

的问题是,导航直后,该文件尚未加载。您将需要将访问文档的代码部分移到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 
} 
+0

是不是。代码在页面加载后运行。但是,我认为这可能与此有关。 – Juan 2011-03-16 06:22:30

相关问题