2014-10-19 173 views
0

我的設置非常簡單,在C#(WPF)中我有一個WebView,加載了我的HTML頁面。無法從C#訪問Javascript對象(CefSharp)

現在我想在兩者之間進行雙向溝通。

從Javascript調用C#完全適合我,使用RegisterJsObject

現在我嘗試從C#執行Javascript,使用ExecuteScript

只要我只用普通的JavaScript,如

ExecuteScript("document.getElementById('test').innerHTML='test'")</code> 

它完美的罰款。

但是,當我嘗試訪問我在Javascript中創建的函數時,它無法執行它們。

的Javascript:

function test(param) { 
    alert(param); 
} 

C#:

webView.ExecuteScript("test('123')"); 
+0

您正在使用哪個版本的CefSharp?我認爲最新的stable有一個稍微不同的語法。你確定函數在你調用的時候被加載了嗎?我想你應該能夠從你的C#中用https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions#Example:_Determining_whether_a_function_exists – jornh 2014-10-20 01:59:26

+0

之類的東西進行檢查。這是一個使用[CefSharp 31 -pre1](https://groups.google.com/forum/?nomobile=true#!topic/cefsharp/IbbgXnOiNV8)發佈。當時我能夠複製好的和不好的情況......至少現在你有一些可以比較的東西。 – jornh 2014-10-20 02:30:48

+0

我使用NuGet獲得了最新的CefSharp軟件包。 我從頭開始重新開始我的項目,先構建非常基本的場景,然後才變得複雜,現在我神奇地工作了。 – Johnny 2014-10-20 10:33:45

回答

0

我不確定,我的實際問題是什麼。

我通過再次從頭開始工作,從基本調用開始,然後越來越接近我想要執行的實際代碼,現在它以某種方式工作。

0

這是我使用的WebView調用我的JavaScript函數從我的WPF C#應用程序:

this.webView.InvokeScript("test", new object[] { "('123')" }); 

爲更多的德tailed explain去這個網站:http://www.dotnetfunda.com/articles/show/840/working-with-webbrowser-in-wpf

希望這是對你有幫助的答案。

+0

我在網上看到了很多InvokeScript,但它僅適用於WebBrowser而不適用於WebView。 – Johnny 2014-10-19 22:44:47