WebBrowser執行指令碼和呼叫外部方法。
阿新 • • 發佈:2018-12-30
控制WebBrowser實際上就是控制IE,最簡單的方法就是執行javascript或vbscript,省去了介面的轉換。
如何執行指令碼?以前我一直用mshtml中IHTMLWindow2介面的execScript()方法,在Delphi中需要uses MSHTML單元:
如何呼叫外部的方法?先看一段在IE中新增收藏夾的程式碼:
查了一下資料,原來可以通過IDocHostUIHandler介面的GetExternal()方法,指定指令碼的外部物件。
在CSharp中更簡單,有WebBrowser.ObjectForScripting屬性直接對應window.external,參考如下程式碼:
如何執行指令碼?以前我一直用mshtml中IHTMLWindow2介面的execScript()方法,在Delphi中需要uses MSHTML單元:
- uses MSHTML;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- (WebBrowser1.Document as IHTMLDocument2).parentWindow.execScript(
- 'alert("hello");', 'javascript')
- end;
- procedure
- begin
- WebBrowser1.Navigate('javascript:alert("hello");')
- end;
如何呼叫外部的方法?先看一段在IE中新增收藏夾的程式碼:
- window.external.AddFavorite(url, title);
查了一下資料,原來可以通過IDocHostUIHandler介面的GetExternal()方法,指定指令碼的外部物件。
在CSharp中更簡單,有WebBrowser.ObjectForScripting屬性直接對應window.external,參考如下程式碼:
- [ComVisible(
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- privatevoid Form1_Load(object sender, EventArgs e)
- {
- webBrowser1.DocumentText = @"
- <html>
- <input type=""button"" value=""測試"" onclick=""alert('Zswang 路過');"">
- </html>
- ";
- }
- publicvoid alertMessage(string s)
- {
- MessageBox.Show(s, "囧");
- }
- privatevoid webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
- {
- webBrowser1.Navigate(@"javascript:
- function alert(str)
- {
- window.external.alertMessage(str);
- }");
- webBrowser1.ObjectForScripting = this;
- }
- }