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

控制WebBrowser实际上就是控制IE,最简单的方法就是执行javascript或vbscript,省去了接口的转换。
如何执行脚本?以前我一直用mshtml中IHTMLWindow2接口的execScript()方法,在Delphi中需要uses MSHTML单元:
  1. uses MSHTML;
  2. procedure TForm1.Button1Click(Sender: TObject);
  3. begin
  4.   (WebBrowser1.Document as IHTMLDocument2).parentWindow.execScript(
  5.     'alert("hello");''javascript')
  6. end;
在CSharp中则需要在工程添加Micrsoft.mshtml,后来得到在地址栏执行脚本的启发。用WebBrowser的Navigate()方法更简单:
  1. procedure TForm1.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. public partial class Form1 : Form
  3. {
  4.     public Form1()
  5.     {
  6.         InitializeComponent();
  7.     }
  8.     private void Form1_Load(object sender, EventArgs e)
  9.     {
  10.         webBrowser1.DocumentText = @"
  11.             <html>
  12.                 <input type=""button"" value=""测试"" οnclick=""alert('Zswang 路过');"">
  13.             </html>
  14.             ";
  15.     }
  16.     public void alertMessage(string s)
  17.     {
  18.         MessageBox.Show(s, "囧");
  19.     }
  20.     private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
  21.     {
  22.         webBrowser1.Navigate(@"javascript:
  23.             function alert(str)
  24.             {
  25.                 window.external.alertMessage(str);
  26.             }");
  27.         webBrowser1.ObjectForScripting = this;
  28.     }
  29. }

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值