2012-03-18 48 views
10

我想awesomium用於創建一個基本的應用程序從C#調用JavaScript中,我測試了JS < ----> C#通信,但是這似乎並不能很好的工作......我創建了一個本地的HTML打開it..so到目前爲止good..but當我嘗試調用JS沒有發生,沒有錯誤,沒有錯誤,沒有什麼,只是這不叫JS ..使用awesomium

我的基本的js代碼是:

var base = { 

    newItem : function(item){ 
    $("#botones").append('<div class="botonMenu">' + item + '</div>'); 
    }, 

    other : function(){ 
     alert("hi!!"); 
    } 

    } 

,如果我考這裏面顯然螢火我可以打電話給我的功能和良好的項目創建或警告框...

now..my C#代碼是這樣的

//I've wrote this code inside the winForms sample..but change the code for load 
//my local file and call js.... 


WebCore.BaseDirectory = @"C:\Documents and Settings\ME\dummytests\codes\views"; 
webView.LoadFile("base.html"); 


JSValue param1 = new JSValue("nameItem"); 
webView.CallJavascriptFunction("base", "other"); 
webView.CallJavascriptFunction("base","newItem", param1); 
webView.Focus(); 

該文件是負載好,但JS的通信沒有這麼多的工作 感謝,並希望可以幫到我...這真的awesomium看起來真棒

+0

你更新的WebCore? – Venatu 2012-04-17 23:03:12

回答

4

問題是,您正試圖在頁面完成加載之前調用頁面上的Javascript。如果您等到加載完成後,您應該看到它正確執行。

webView.LoadCompleted += ExecuteJavascript; 

WebCore.BaseDirectory = @"C:\Documents and Settings\ME\dummytests\codes\views"; 
webView.LoadFile("base.html"); 

...

private void ExecuteJavascript(object sender, EventArgs eventArgs) 
{ 
    JSValue param1 = new JSValue("nameItem"); 
    webView.CallJavascriptFunction("base", "other"); 
    webView.CallJavascriptFunction("base", "newItem", param1); 
    webView.Focus(); 
} 
0

這是Awesomium v​​1.7.0.5的解決方案。它使用「JSObject」來獲取JavaScript「窗口」對象。從那裏它調用一個使用jQuery動態設置「div」文本的javascript函數。這還使用jQuery在文檔準備就緒時調用該函數。

可以使用JSObject.Bind方法從javascript調用C#方法。

頭:

<script type="text/javascript"> 

    function setDivText(s) 
    { 
     $("#msgDiv").text(s); 
    } 

    $(document).ready(function() { 

     setDivText("This is the start up text."); 

    }); 
</script> 

身體:

<body> 
<p>Test...</p> 
<p></p> 

<div id="msgDiv"></div> 

</body> 

C#:

這使用WPF的WebControl與 「web視圖」 按鈕單擊事件處理程序中的名稱。

using Awesomium.Core; 

    ... 

    private void Button1_Click(object sender, RoutedEventArgs e) 
    { 
    JSObject window = webView.ExecuteJavascriptWithResult("window"); 

    if (window == null) 
     return; 

    using (window) 
    { 
     window.InvokeAsync("setDivText", "You pressed button 1.");    
    } 
    }