【问题标题】:How do I inject javascript code via webview?如何通过 webview 注入 javascript 代码?
【发布时间】:2015-07-22 15:29:11
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您可以做两件主要的事情:

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

    函数调用

    你可以使用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),您可以通过操作然后导航到字符串来注入任何代码。

    假设您想更改上述脚本以添加另一个函数“HelloWorld”,那么您可以

    1. 在文件中搜索您知道会出现的内容,例如:&lt;script lang=\"en-us\" type=\"text/javascript\"&gt;
    2. 使用字符串操作,添加所需的文本,例如函数(但可以是任何内容)
    3. 导航到字符串

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      相关资源
      最近更新 更多