我正在尝试使用awesomium来创建一个基本应用程序,我正在测试js< ----> c#通信,但这看起来效果不好......我创建了一个本地html并打开它..那么好..但是当我尝试调用js时没有任何事情发生,没有错误,没有错误,什么都没有,只是这个没有'打电话给js ..
我的基本js代码是:
var base = {
newItem : function(item){
$("#botones").append('<div class="botonMenu">' + item + '</div>');
},
other : function(){
alert("hi!!");
}
}
如果我在firebug中测试这个,显然我可以很好地调用我的功能并创建项目或警告框......
now..my c#code is this
//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通信不起作用 非常感谢,我希望可以帮助我...这个真棒很棒真的很棒
答案 0 :(得分: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();
}
答案 1 :(得分:0)
这是Awesomium v1.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#:
这在Button Click事件处理程序中使用名称为“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.");
}
}