вызов Javascript из c# с помощью awesomium

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

мой основной код js:

 var base = {

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

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

  }

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

теперь..мой код 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 SettingsMEdummytestscodesviews";
webView.LoadFile("base.html");


JSValue param1 = new JSValue("nameItem");
webView.CallJavascriptFunction("base", "other");
webView.CallJavascriptFunction("base","newItem", param1);
webView.Focus();

файл хорошо загружен, но связь js не работала большое спасибо и я надеюсь, что может мне помочь...этот awesomium действительно выглядит потрясающе

2 ответов


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

Это решение для Awesomium v1.7.0.5. Он использует "JSObject", чтобы получить объект javascript" window". Оттуда он вызывает функцию 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.");            
     }
  }