聊做備忘。
假設js代碼為:
string jsCode = @"function showAlert(s) {{ alert('hello, world! ' + s);}}; showAlert('{0}');";
那么,在WebBrowser文檔加載完成后,兩種方法可以執行它:
1、常規方法,追加script元素:
var script = browser.Document.CreateElement("script"); script.SetAttribute("type", "text/javascript"); script.SetAttribute("text", "function _func() {" + string.Format(jsCode, "method 1") + "}"); browser.Document.Body.AppendChild(script); browser.Document.InvokeScript("_func");
這種方法,可以傳參及取得返回值,用的多些。缺點是因為注入html頁面中,會影響html源碼。
如果禁止browser報script錯誤,其即便運行出錯也無提示。
2、DomDocument法。此方法,須在程序中引用MSHTML對象。
ar doc = this.browser.Document.DomDocument as IHTMLDocument2; var win = doc.parentWindow as IHTMLWindow2; jsCode = string.Format(jsCode, "method 2"); win.execScript(jsCode, "javascript");
此方案不能傳參沒有返回值,還要引用MSHTML對象,用的少些。 其與下面方案一樣,不影響頁面html源碼結構。
若js代碼運行出錯,即有提示。
3、最簡方案:
browser.Document.InvokeScript("execScript", new Object[] { string.Format(jsCode, "method 3"), "javascript" });
這種省事,是我最喜歡的方法!
這三種方法,都 能成功執行js代碼:
參考資料: