Вызывая 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 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 ответа
Проблема в том, что вы пытаетесь вызвать 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 ". Оттуда он вызывает функцию 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" внутри обработчика событий 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.");
}
}