首页  ·  知识 ·  编程语言
WebBrowser执行脚本和调用外部方法
网友    .NET  编辑:dezai   图片来源:网络
控制WebBrowser实际上就是控制IE,最简单的方法就是执行javascript或vbscript,省去了接口的转换。 如何执行脚本?

控制WebBrowser实际上就是控制IE,最简单的方法就是执行javascript或vbscript,省去了接口的转换。如何执行脚本?以前我一直用mshtml中IHTMLWindow2接口的execScript()方法,在Delphi中需要uses MSHTML单元:

procedure TForm1.Button1Click(Sender: TObject);
begin
   WebBrowser1.Navigate('javascript:alert("hello");')
end;

在CSharp中则需要在工程添加Micrsoft.mshtml,后来得到在地址栏执行脚本的启发。用WebBrowser的Navigate()方法更简单:

uses MSHTML;

procedure TForm1.Button1Click(Sender: TObject);
begin
   (WebBrowser1.Document as IHTMLDocument2).parentWindow.execScript(
    'alert("hello");', 'javascript')
end;

省去了添加引用的麻烦。

如何调用外部的方法?先看一段在IE中添加收藏夹的代码:

window.external.AddFavorite(url, title);

脚本中window.external对象就是一个外部对象,AddFavorite()则是这个外部对象的方法!
查了一下资料,原来可以通过IDocHostUIHandler接口的GetExternal()方法,指定脚本的外部对象。
在CSharp中更简单,有WebBrowser.ObjectForScripting属性直接对应window.external,参考如下代码:

[ComVisible(true)]
public partial class Form1 : Form
{
    public Form1()
     {
         InitializeComponent();
     }

    private void Form1_Load(object sender, EventArgs e)
     {
         webBrowser1.DocumentText = @"
             <html>
                 <input type=""button"" value=""测试"" onclick=""alert('Zswang 路过');"">
             </html>
             ";
     }

    public void alertMessage(string s)
     {
         MessageBox.Show(s, "囧");
     }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
     {
         webBrowser1.Navigate(@"javascript:
             function alert(str)
             {
                 window.external.alertMessage(str);
             }");
         webBrowser1.ObjectForScripting = this;
     }

本文作者:网友 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读