2010-11-10 180 views
7

我一直在使用ac#win forms項目中的webkit.net玩,並且很喜歡從C#程序中調用JavaScript函數的容易程度:使用WebKit.NET從JavaScript調用C#函數

browser.Document.InvokeScriptMethod("functionName", new object[]{"parameter1", "parameter2"});

現在的問題是如何做到另一種方式......是否有某種事件偵聽器,可以偵聽一個JavaScript函數調用,或任何方式來調用ac#方法通過JavaScript運行在webkit瀏覽器?

我現在這樣做的方式,它使用一個壞的黑客...看看可用的事件偵聽器,我迷上了TitleChanged事件,並閱讀隱藏的input字段的值在HTML ....這是非常糟糕的,需要一個實際的解決方案。

在此先感謝, - Greg。

回答

11
public Form1() 
    { 
     InitializeComponent(); 
     webKitBrowser1.Navigating += new WebBrowserNavigatingEventHandler(Form1_Navigating); 
    } 


    private void Form1_Navigating(object sender, WebBrowserNavigatingEventArgs e) 
    { 
     string url = e.Url.ToString(); 
     if (url.IndexOf("app://") > -1) 
     { 
      e.Cancel = true; 
      processRequest(url); 
     } 
    } 

這可能不是通過你的醜陋的黑客攻擊測試,但對於從.NET嵌入式瀏覽器處理請求的古老的方法。本質上,你在瀏覽器中攔截URL GET請求。如果網址包含關鍵字(如app://),則取消GET並處理URL參數。返回值通常是通過調用Navigate方法完成的,但是,使用您在文章中描述的方法,您可以直接調用JavaScript函數。

+0

非常好的實現。 – Greg 2011-06-21 08:26:14

5

github上有一個分支,它爲腳本對象添加了對此的支持(類似於標準winforms瀏覽器)。當瀏覽器加載時,您可以使用webKitBrowser.ObjectForScripting = myObject來設置腳本對象,該對象將處理您的js調用。然後從js中可以通過使用window.external.foo()來調用該方法。希望這可以幫助。

+0

如果我包含鏈接,它會有所幫助:) https://github.com/scampy/webkitdotnet – Kevin 2010-11-12 20:03:16

+0

任何人都可以找到一個成功編譯的webkitdotnet版本啓用此功能嗎?謝謝。 – 2012-06-13 13:56:59