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

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.