您的位置:首页 > 其它

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

2008-10-06 09:54 721 查看
控制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 = @"
<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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐