WPF的WebBrowser 里面使用JavaScript調用外部方法的決解方法


在原來的WinForm里 我們只要在窗體類設置的頭部設置個 [System.Runtime.InteropServices.ComVisibleAttribute(true)]

然后 webBrowser1.ObjectForScripting = this; 

這樣設置完后 頁面上的JS就能訪問我們程序里面的方法了,但是在WPF里如果這樣設置的話會提示一大串錯誤提示:

執行了 QueryInterface 調用,請求提供 COM 可見的托管類“Cloud.MainWindow”的默認 IDispatch 接口。不過,由於該類沒有顯式默認接口,並且是從非 COM 可見的類“System.Windows.Window”派生的,QueryInterface 調用將失敗。這樣做的目的是避免非 COM 可見的基類受 COM 版本規則的約束。

為什么會出這個錯誤我也不清楚... 

然后Google下國外的網站發現了一種解決辦法,新建一個類

[System.Runtime.InteropServices.ComVisibleAttribute(true)]//將該類設置為com可訪問
public class ObjectForScriptingHelper
{
  MainWindow mainWindow;

  public ObjectForScriptingHelper(MainWindow main)
  {
    mainWindow = main;
  }

  //這個方法就是網頁上要反問的方法
  public void HtmlCmd(string cmd)
  {

    MessageBox.Show(cmd);

  }
}

 

然后在我們的WPF窗體加上調用

ObjectForScriptingHelper helper = new ObjectForScriptingHelper(this);

this.webBrowser.ObjectForScripting = helper;

OK 這樣就可以了!


免責聲明!

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



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