10

我正在尝试使用 awesomium 创建一个基本的应用程序,我正在测试 js <----> c# 通信,但这似乎效果不佳......我创建了一个本地 html 并打开它......到目前为止一切都很好..但是当我尝试调用 js 时,什么也没有发生,没有错误,没有错误,什么都没有,只是这不会调用 js ..

我的基本 js 代码是:

 var base = {

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

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

  }

如果我在萤火虫中测试这个显然我可以很好地调用我的函数并创建项目或警报框......

现在..我的 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 真的很棒

4

2 回答 2

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();
}
于 2012-06-08T19:46:43.420 回答
0

这是 Awesomium v​​1.7.0.5 的解决方案。它使用“JSObject”来获取javascript“window”对象。从那里它调用一个javascript函数,该函数使用jQuery来动态设置“div”的文本。这也使用 jQuery 在文档准备好时调用该函数。

可以使用 JSObject.Bind 方法从 javascript 调用 C# 方法。

头:

<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#:

这在按钮单击事件处理程序中使用名称为“webView”的 WPF WebControl。

  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.");            
     }
  }
于 2013-04-30T15:36:32.560 回答