您的当前位置:首页正文

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

2021-05-21 来源:个人技术集锦
WebBrowser执⾏脚本和调⽤外部⽅法。

控制WebBrowser实际上就是控制IE,最简单的⽅法就是执⾏javascript或vbscript,省去了接⼝的转换。

如何执⾏脚本?以前我⼀直⽤mshtml中IHTMLWindow2接⼝的execScript()⽅法,在Delphi中需要uses MSHTML单元:uses MSHTML;

procedure TForm1.Button1Click(Sender: TObject);begin

(WebBrowser1.Document as IHTMLDocument2).parentWindow.execScript( 'alert(\"hello\");', 'javascript')end;

在CSharp中则需要在⼯程添加Micrsoft.mshtml,后来得到在地址栏执⾏脚本的启发。⽤WebBrowser的Navigate()⽅法更简单:procedure TForm1.Button1Click(Sender: TObject);begin

WebBrowser1.Navigate('javascript:alert(\"hello\");')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 = @\"

\"; }

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; }}

因篇幅问题不能全部显示,请点此查看更多更全内容