Вызов Javascript из С# с использованием awesomium

Я пытаюсь awesomium для создания базового приложения, я тестирую сообщение js < ---- > С#, но это не работает хорошо... Я создаю локальный html и открываю его. до сих пор так хорошо.. но когда я пытаюсь вызвать js, ничего не происходит, нет ошибки, нет ошибки, ничего, просто это не вызывает js..

мой базовый код js:

 var base = {

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

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

  }

если я тестирую этот внутри firebug, очевидно, что я могу хорошо вызывать свои функции и создавать элементы или окно предупреждения...

now..my С# code - это

//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 действительно выглядит потрясающе

Ответ 1

Проблема заключается в том, что вы пытаетесь вызвать 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();
}

Ответ 2

Это решение для Awesomium v1.7.0.5. Он использует "JSObject", чтобы получить объект "окна" javascript. Оттуда он вызывает функцию javascript, которая использует jQuery для динамического набора текста "div". Это также использует jQuery для вызова функции, когда документ готов.

Можно использовать метод JSObject.Bind для вызова методов С# из 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>

С#:

Это использует WPF WebControl с именем "webView" внутри обработчика события Button Click.

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