聊作備忘。javascript
假設js代碼爲:html
string jsCode = @"function showAlert(s) {{ alert('hello, world! ' + s);}}; showAlert('{0}');";
那麼,在WebBrowser文檔加載完成後,兩種方法能夠執行它:java
一、常規方法,追加script元素:git
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源碼。 github
若是禁止browser報script錯誤,其即使運行出錯也無提示。web
二、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源碼結構。this
若js代碼運行出錯,即有提示。spa
三、最簡方案:3d
browser.Document.InvokeScript("execScript", new Object[] { string.Format(jsCode, "method 3"), "javascript" });
這種省事,是我最喜歡的方法!
這三種方法,都 能成功執行js代碼:
參考資料: