2012-03-18 14 views
10

Próbuję awesomium dla stworzenia podstawowej aplikacji, testuję js < ----> C# komunikacji, ale to nie wydaje się działać dobrze ... Tworzę lokalny html i otworzyć it..so pory tak good..but przy próbie wywołania js nic nie stało, nie błąd, nie błąd, nic, po prostu tego nie nazwać js ..wywoływanie Javascript z C# przy użyciu awesomium

mój podstawowy kod js jest:

var base = { 

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

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

    } 

gdybym przetestować tę wewnątrz Firebug oczywiście mogę zadzwonić do moich funkcji dobrze i elementy są tworzone lub okno alertu ...

now..my C# kod jest ten

//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(); 

plik jest obciążenie dobrze ale komunikacja js nie działa dzięki tak bardzo i mam nadzieję, że może mi pomóc ... to awesomium naprawdę wyglądają niesamowite

+0

Czy aktualizujesz WebCore? – Venatu

Odpowiedz

4

Problem polega na tym, że próbujesz wywołać skrypt Javascript na stronie przed zakończeniem ładowania. Jeśli poczekasz, aż zakończy się ładowanie, powinieneś zobaczyć, że jest poprawnie wykonany.

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

Jest to rozwiązanie dla Awesomium v1.7.0.5. Używa "JSObject", aby uzyskać obiekt okna "javascript". Stamtąd wywołuje funkcję javascript, która używa jQuery do dynamicznego ustawiania tekstu "div". To również wykorzystuje jQuery do wywołania funkcji, gdy dokument jest gotowy.

Można użyć metody JSObject.Bind do wywołania metod C# z javascript.

Głowa:

<script type="text/javascript"> 

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

    $(document).ready(function() { 

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

    }); 
</script> 

ciała:

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

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

</body> 

C#:

używa WPF WebControl z nazwą "Webview" wewnątrz obsługi zdarzenia kliknięcia przycisku.

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.");    
    } 
    } 
Powiązane problemy