2012-03-18 2 views
10

Я пытаюсь awesomium для того чтобы создать основное app, я испытываю js < ----> C# сообщение но это не кажется работать наилучшим образом ... Я создаю местный html и открыть it..so далеко так good..but, когда я пытаюсь вызове ничего не расслоение плотной случаться, не ошибка, не ошибка, ничего, просто это не вызывает JS .., вызывающ Javascript от C# using 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

ответ

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 v1.7.0.5. Он использует «JSObject», чтобы получить объект «окна» javascript. Оттуда он вызывает функцию javascript, которая использует jQuery для динамического набора текста «div». Это также использует jQuery для вызова функции, когда документ готов.

Можно использовать метод JSObject.Bind для вызова методов C# из javascript.

Руководитель:

<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 с именем "Webview" внутри обработчика события нажатия кнопки.

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.");    
    } 
    } 
Смежные вопросы