请在C#中使用WebView注入JavaScript时需要帮助。
我试图想出一个响应点击事件的WebView(注意:WebView中的html不是我的,它是动态生成的)。不幸的是,根据WebView,点击事件不是它响应的部分。因此,我可以选择从WebView响应html元素的事件。到目前为止,我在saramgsilva上找到了这段代码:
await WebView.InvokeScriptAsync("eval", new[]
{
"var signButton=document.getElementById(\"MyButton\");" +
"if (signButton.addEventListener) {" +
"signButton.addEventListener(\"click\", MyButtonClicked, false);" +
"} else {" +
"signButton.attachEvent('onclick', MyButtonClicked);" +
"} " +
"function MyButtonClicked(){" +
" window.external.notify('%%' + location.href);"+
"}"
});
我修改了它以在我的代码中得到它:
await WebView.InvokeScriptAsync("eval", new[]
{
"var bodyEl=document.getElementsByTagName(\"body\");" +
"if (bodyEl[0].addEventListener) {" +
"bodyEl[0].addEventListener(\"click\", VideoClicked, false);" +
"} else {" +
"bodyEl[0].attachEvent('onclick', VideoClicked);" +
"} " +
"function VideoClicked(){" +
" window.external.notify('VideoClick');"+
"}"
});
此代码应该响应调用window.external.notify(' VideoClick'):
private void WebView_ScriptNotify(object sender, NotifyEventArgs e)
{
var url = e.Value;
}
当执行到达此处时,我希望url包含' VideoClick',当我逐步执行代码时,从未调用此方法。
代码应该插入JavaScript但是,不幸的是,我没有得到异常并且它没有按照我期望的方式工作,似乎InvokeScriptAsync意味着调用JavaScript仅限功能。
我还尝试在ScriptNotify页面上的示例中使用AllowedScriptNotifyUris方法,但它显然无法与Windows 8.1应用程序一起使用。
答案 0 :(得分:0)
在HTML文件中创建函数:
<html>
<head>
<!-- Head goes here -->
</head>
<body>
<!-- Body goes here -->
<script type="text/javascript">
var signButton=document.getElementById("MyButton");
if (signButton.addEventListener) {
signButton.addEventListener("click", MyButtonClicked, false);
} else {
signButton.attachEvent('onclick', MyButtonClicked);
}
function MyButtonClicked(){
window.external.notify('%%' + location.href);
}
</script>
</body>
</html>
并从您的代码中调用它:await WebView.InvokeScriptAsync("eval", new[]
{ "MyButtonClicked();" });
答案 1 :(得分:0)
在尝试调用方法之前,确保JS已完成执行。 在Visual Studio中使用脚本调试以查看相关错误。
用于Windows Phone 8: http://www.jayway.com/2014/03/10/windows-phone-8-native-and-javascript-interop/
用于Windows Phone 8.1: http://www.jayway.com/2014/08/27/webview-javascript-interop-woes-in-windows-phone-8-1-universal-app/