WebBrowser执行脚本和调用外部方法。

控制WebBrowser实际上就是控制IE,最简单的方法就是执行javascript或vbscript,省去了接口的转换。
如何执行脚本?以前我一直用mshtml中IHTMLWindow2接口的execScript()方法,在Delphi中需要uses MSHTML单元:
  1. usesMSHTML;
  2. procedureTForm1.Button1Click(Sender:TObject);
  3. begin
  4. (WebBrowser1.DocumentasIHTMLDocument2).parentWindow.execScript(
  5. 'alert("hello");','javascript')
  6. end;
在CSharp中则需要在工程添加Micrsoft.mshtml,后来得到在地址栏执行脚本的启发。用WebBrowser的Navigate()方法更简单:
  1. procedureTForm1.Button1Click(Sender:TObject);
  2. begin
  3. WebBrowser1.Navigate('javascript:alert("hello");')
  4. end;
省去了添加引用的麻烦。

如何调用外部的方法?先看一段在IE中添加收藏夹的代码:
  1. window.external.AddFavorite(url,title);
脚本中window.external对象就是一个外部对象,AddFavorite()则是这个外部对象的方法!
查了一下资料,原来可以通过 IDocHostUIHandler接口的GetExternal()方法,指定脚本的外部对象。
在CSharp中更简单,有WebBrowser.ObjectForScripting属性直接对应window.external,参考如下代码:
  1. [ComVisible(true)]
  2. publicpartialclassForm1:Form
  3. {
  4. publicForm1()
  5. {
  6. InitializeComponent();
  7. }
  8. privatevoidForm1_Load(objectsender,EventArgse)
  9. {
  10. webBrowser1.DocumentText=@"
  11. <html>
  12. <inputtype=""button""value=""测试""οnclick=""alert('Zswang路过');"">
  13. </html>
  14. ";
  15. }
  16. publicvoidalertMessage(strings)
  17. {
  18. MessageBox.Show(s,"囧");
  19. }
  20. privatevoidwebBrowser1_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse)
  21. {
  22. webBrowser1.Navigate(@"javascript:
  23. functionalert(str)
  24. {
  25. window.external.alertMessage(str);
  26. }");
  27. webBrowser1.ObjectForScripting=this;
  28. }
  29. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值