WebBrowser執行腳本和調用外部方法


控制WebBrowser實際上就是控制IE,最簡單的方法就是執行javascript或vbscript,省去了接口的轉換。
如何執行腳本?以前我一直用mshtml中IHTMLWindow2接口的execScript()方法,在Delphi中需要uses MSHTML單元:

  1. uses MSHTML;
  2. procedure TForm1.Button1Click(Sender: TObject);
  3. begin
  4.   (WebBrowser1.Document as IHTMLDocument2).parentWindow.execScript(
  5.     'alert("hello");', 'javascript')
  6. end;

在CSharp中則需要在工程添加Micrsoft.mshtml,后來得到在地址欄執行腳本的啟發。用WebBrowser的Navigate()方法更簡單:

  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   WebBrowser1.Navigate('javascript:alert("hello");')
  4. end;

省去了添加引用的麻煩。

如何調用外部的方法?先看一段在IE中添加收藏夾的代碼:

  1. window.external.AddFavorite(url, title);

腳本中window.external對象就是一個外部對象,AddFavorite()則是這個外部對象的方法!
查了一下資料,原來可以通過IDocHostUIHandler接口的GetExternal()方法,指定腳本的外部對象。
在CSharp中更簡單,有WebBrowser.ObjectForScripting屬性直接對應window.external,參考如下代碼:

    1. [ComVisible(true)] 
    2. public partial class Form1 : Form
    3. {
    4.     public Form1()
    5.     {
    6.         InitializeComponent();
    7.     }
    8.     private void Form1_Load(object sender, EventArgs e)
    9.     {
    10.         webBrowser1.DocumentText = @"
    11.             <html>
    12.                 <input type=""button"" value=""測試"" onclick=""alert('Zswang 路過');"">
    13.             </html>
    14.             ";
    15.     }
    16.     public void alertMessage(string s)
    17.     {
    18.         MessageBox.Show(s, "囧");
    19.     }
    20.     private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    21.     {
    22.         webBrowser1.Navigate(@"javascript:
    23.             function alert(str)
    24.             {
    25.                 window.external.alertMessage(str);
    26.             }");
    27.         webBrowser1.ObjectForScripting = this;
    28.     }
    29. }

 

http://blog.csdn.net/zswang/article/details/3020109


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM