控制WebBrowser实际上就是控制IE,最简单的方法就是执行javascript或vbscript,省去了接口的转换。
如何执行脚本?以前我一直用mshtml中IHTMLWindow2接口的execScript()方法,在Delphi中需要uses MSHTML单元:
在CSharp中则需要在工程添加Micrsoft.mshtml,后来得到在地址栏执行脚本的启发。用WebBrowser的Navigate()方法更简单:
省去了添加引用的麻烦。
如何调用外部的方法?先看一段在IE中添加收藏夹的代码:
脚本中window.external对象就是一个外部对象,AddFavorite()则是这个外部对象的方法!
查了一下资料,原来可以通过 IDocHostUIHandler接口的GetExternal()方法,指定脚本的外部对象。
在CSharp中更简单,有WebBrowser.ObjectForScripting属性直接对应window.external,参考如下代码:
如何执行脚本?以前我一直用mshtml中IHTMLWindow2接口的execScript()方法,在Delphi中需要uses MSHTML单元:
- usesMSHTML;
- procedureTForm1.Button1Click(Sender:TObject);
- begin
- (WebBrowser1.DocumentasIHTMLDocument2).parentWindow.execScript(
- 'alert("hello");','javascript')
- end;
- procedureTForm1.Button1Click(Sender:TObject);
- begin
- WebBrowser1.Navigate('javascript:alert("hello");')
- end;
如何调用外部的方法?先看一段在IE中添加收藏夹的代码:
- window.external.AddFavorite(url,title);
查了一下资料,原来可以通过 IDocHostUIHandler接口的GetExternal()方法,指定脚本的外部对象。
在CSharp中更简单,有WebBrowser.ObjectForScripting属性直接对应window.external,参考如下代码:
- [ComVisible(true)]
- publicpartialclassForm1:Form
- {
- publicForm1()
- {
- InitializeComponent();
- }
- privatevoidForm1_Load(objectsender,EventArgse)
- {
- webBrowser1.DocumentText=@"
- <html>
- <inputtype=""button""value=""测试""οnclick=""alert('Zswang路过');"">
- </html>
- ";
- }
- publicvoidalertMessage(strings)
- {
- MessageBox.Show(s,"囧");
- }
- privatevoidwebBrowser1_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse)
- {
- webBrowser1.Navigate(@"javascript:
- functionalert(str)
- {
- window.external.alertMessage(str);
- }");
- webBrowser1.ObjectForScripting=this;
- }
- }