2012-03-18 17 views
10

Sto provando awesomium per creare un'app di base, sto testando la comunicazione js < ----> C# ma questo non sembra funzionare bene ... Creo un html locale e aprire it..so qui tutto good..but quando provo chiamata js accadere nulla, nessun errore, nessun bug, nulla, semplicemente questo non chiama js ..chiamando Javascript da C# usando awesomium

mio codice js di base è:

var base = { 

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

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

    } 

se provo questo firebug all'interno, ovviamente, posso chiamare le mie funzioni bene e le voci vengono creati o la finestra di avviso ...

now..my codice C# è questo

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

il file è ben carico, ma la comunicazione js non ha funzionato grazie tanto e spero che mi può aiutare ... questo awesomium davvero sembrano impressionanti

+0

Si sta aggiornando il WebCore? – Venatu

risposta

4

Il problema è che stai cercando di chiamare il Javascript sulla pagina prima che abbia finito di caricarlo. Se aspetti fino a quando il caricamento non è completato, dovresti vederlo eseguire correttamente.

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

Si tratta di una soluzione per Awesomium v1.7.0.5. Usa "JSObject" per ottenere l'oggetto "finestra" javascript. Da lì chiama una funzione javascript che usa jQuery per impostare dinamicamente il testo di un "div". Questo utilizza anche jQuery per chiamare la funzione quando il documento è pronto.

Uno può utilizzare il metodo JSObject.Bind per chiamare i metodi C# da javascript.

Responsabile:

<script type="text/javascript"> 

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

    $(document).ready(function() { 

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

    }); 
</script> 

Corpo:

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

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

</body> 

C#:

Questo utilizza WPF WebControl con il nome di "WebView" all'interno di un gestore di eventi clic del pulsante.

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.");    
    } 
    } 
Problemi correlati