2011-03-16 57 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

相關問題