вызывая Javascript из C # с помощью awesomium - PullRequest
10 голосов
/ 19 марта 2012

Я пытаюсь использовать 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 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 не работает Большое спасибо, и я надеюсь, что может помочь мне ... этот удивительный действительно потрясающе

Ответы [ 2 ]

4 голосов
/ 08 июня 2012

Проблема в том, что вы пытаетесь вызвать 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 голосов
/ 30 апреля 2013

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

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

Head:

<script type="text/javascript">

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

    $(document).ready(function () {

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

    });
</script>

Body:

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