2012-03-18 19 views
10

Estoy intentando awesomium para crear una aplicación básica, estoy probando la comunicación js < ----> C# pero esto no parece funcionar bien ... Creo un html local y abrir it..so ahora tan good..but cuando intento llamada js no pasa nada, no hay error, no hay error, nada, simplemente esto no llama js ..llamando a Javascript desde C# usando awesomium

mi código js básica es:

var base = { 

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

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

    } 

si pruebo este incendiario dentro evidente que no puedo llamar a mis funciones bien y los artículos son creados o el cuadro de alerta ...

now..my código C# es este

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

el archivo está bien pero la carga de la comunicación js no funcionó muchas gracias y espero que me pueda ayudar ... este awesomium realmente parecen impresionantes

+0

¿Está actualizando la WebCore? – Venatu

Respuesta

4

El problema es que estás tratando de invocar el Javascript en la página antes de que termine de cargarse. Si espera hasta que la carga se haya completado, debería ver que se ejecute correctamente.

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

Esta es una solución para Awesomium v1.7.0.5. Utiliza "JSObject" para obtener el objeto javascript "ventana". Desde allí llama a una función de JavaScript que usa jQuery para establecer dinámicamente el texto de un "div". Esto también usa jQuery para llamar a la función cuando el documento está listo.

Se puede usar el método JSObject.Bind para llamar a los métodos C# desde javascript.

Cabeza:

<script type="text/javascript"> 

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

    $(document).ready(function() { 

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

    }); 
</script> 

cuerpo:

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

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

</body> 

C#:

Este utiliza WPF WebControl con nombre de "web View" dentro de un controlador de eventos clic de botón.

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