如何通过webview注入javascript代码?

时间:2015-07-22 15:29:11

标签: c# xaml webview windows-phone-8.1 win-universal-app

基本上我想要做的就是这个this,但我似乎找不到类似于webview XAML控件的东西。我最终需要做的是从webview捕获传入的json文件。因此,我收到来自服务器的错误请求和来自webview的不受支持的文件异常。我考虑过注入一个javascript以便提醒我,我可以获取传入json的主体并绕过所有错误。

1 个答案:

答案 0 :(得分:1)

您可以做两件事:

  1. 以编程方式调用函数
  2. 使用HTML字符串
  3. 注入任何代码

    调用函数

    您可以使用InvokeScript来调用javascript函数。

    如果您的网页上有脚本:

    <script lang="en-us" type="text/javascript">
       function myFunction() {
           alert("I am an alert box!");
       }
    </script>
    

    然后你可以在C#中调用:

    MyWebview.InvokeScript("myFunction", null);
    

    将执行脚本函数myFunction

    注入文本

    如果您下载HTML页面和所有其他所需文件(使用Windows HttpClient),您可以通过操作然后导航到字符串来注入任何代码。

    假设您要更改上面的脚本以添加其他功能,&#34; HelloWorld&#34;,那么您可以

    1. 在文件中搜索您知道的内容,例如:<script lang=\"en-us\" type=\"text/javascript\">
    2. 使用字符串操作,添加所需的文本,例如函数(但这可以是任何内容)
    3. 导航到字符串
    4. C#代码:

      string MyWebPageString = GetWebpageString(WebpageUri);
      string ScriptTagString = "<script lang=\"en-us\" type=\"text/javascript\">";
      int IndexOfScriptTag = MyWebPageString.IndexOf(ScriptTagString);
      int LengthOfScriptTag = ScriptTagString.Length;
      string InsertionScriptString = "function SayHelloWorld() { window.external.notify(\"Hello World!\");} ";
      MyWebPageString = MyWebPageString.Insert(IndexOfScriptTag + LengthOfScriptTag + 1, InsertionScriptString);
      MyWebview.NavigateToString(MyWebPageString);
      

      结果是导航到网页将如下所示:

      <script lang="en-us" type="text/javascript"> function SayHelloWorld() { window.external.notify("Hello World!");}
         function myFunction() {
             alert("I am an alert box!");
         }
      </script>
      

      由于注入可以应用于任何区域,甚至HTML,你应该能够解决问题。

      希望这会有所帮助。祝你好运。

      此答案基于this MSDN blog