在原來的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 這樣就可以了!