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


聊做備忘。

假設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代碼:

 

 

參考資料:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM