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