使用wp8的webbrowser想实现如下功能
1:能用c#调用包含html中的js
2:能用html中的js调用c#中方法
注意:
一开始找WebBrowser的js通讯交互,看到blog
地址:http://blog.csdn.net/zzzzzzzert/article/details/7787481
但在wp8中始终不好使
原来:
普通C#的WebBrowser是:System.Windows.Controls.WebBrowser
是设置:ObjectForScripting
MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.controls.webbrowser.objectforscripting(v=vs.110).aspx
而wp8的WebBrowser是:Microsoft.Phone.Controls.WebBrowser
是设置:ScriptNotify
MSDN:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/microsoft.phone.controls.webbrowser.scriptnotify(v=vs.105).aspx
弄明白这个就好办了
步骤如下:
1:能用c#调用包含html中的js
原理:通过InvokeScript方法
MSDN:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/ff402855(v=vs.105).aspx
1.1:xaml中WebBrowser设置属性:LoadCompleted="webBrowserPanel1_success"
1.2:在方法中
private void webBrowserPanel1_success(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
string[] arrPara = new string[1];
arrPara[0] = "this is form c#";
try
{
webBrowserPanel1.InvokeScript("fun_c",arrPara);
}
catch (Exception ex)
{
Msg("出错:"+ex.Message);
}
}
1.3:在html中script中
function fun_c(args) {
alert(args);
}
加载完成后,就可以显示内容
2:能用html中的js调用c#中方法
原理:通过ScriptNotify方法
1.1:xaml中WebBrowser设置属性:ScriptNotify="webBrowserPanel1_ScriptNotify"
1.2:在方法中
private void webBrowserPanel1_ScriptNotify(object sender, NotifyEventArgs e)
{
String sValue = e.Value;
Debug.WriteLine(sValue);
Msg(sValue);
}
注意:Msg是封装:MessageBox.Show
1.3:在html中
function fun_op_c() {
try {
window.external.notify("需要弹出的警告!");
} catch (e) {
alert("出错"+e.message);
}
}
<input type="button" οnclick="fun_op_c()" value="调用c#的内容"><br>
运行点"调用c#的内容",即可弹出,看debug信息,代表通讯交互成功
希望对你有用处