c#: WebBrowser控件注入js代碼的三種方案

聊作備忘。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代碼:

 

 

參考資料:

webBrowser調用外部js文件和js函數 - SDYWCD--阿達阿達 - ITeye博客

在 C# 中執行 js · Issue #9 · jinhailang/blog

相關文章
相關標籤/搜索