控制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; }}
因篇幅问题不能全部显示,请点此查看更多更全内容