2012-03-18 12 views
10

私は基本的なアプリケーションを作成するためにawesomiumを試していますが、私はjsをテストしています< ----> C#通信しかし、これはうまくいくようには見えません...私はローカルhtmlC#からawesomiumを使用してJavascriptを呼び出す

:と

私の基本的なjsのコードがある..私は、コールJS何も起こりませんエラー、なしバグ、何をしようとしていないときまでのところは、単にこれはjsの呼び出しませんgood..but it..soを開きます

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

答えて

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の "window"オブジェクトを取得します。そこから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#:

これは、ボタンのClickイベントハンドラ内 "のWebView" の名称でWPF WebBrowserコントロールを使用しています。

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.");    
    } 
    } 
関連する問題