我有一个应用程序使用以下代码在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”文件但仍然没有错误。知道为什么会发生这种情况或者我怎么能重现错误?
不幸的是,我不知道错误发生在哪个网页上。
答案 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
}