如何在WebView中注入JavaScript?

时间:2015-01-22 14:16:24

标签: c# windows-phone-8.1

请在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应用程序一起使用。

2 个答案:

答案 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/