【问题标题】:Injecting JavaScript into WebView in Android 6在 Android 6 中将 JavaScript 注入 WebView
【发布时间】:2016-03-28 06:33:34
【问题描述】:

所以最近我试图通过在清单文件中设置android:targetSdkVersion="23" 来为 Android 6 构建我的应用程序,一切顺利,但后来我注意到 webview 的奇怪行为。

在我的应用程序中,我首先使用 webview.LoadData (someHtmlContent, "text/html; charset=UTF-8", null); 将一些内容加载到 webview 中,然后用户可以随时使用应用程序菜单中的一些按钮来更改文本大小。这些按钮的工作方式如下:

webview.LoadUrl ("javascript:" + "document.getElementsByTagName(\"body\")[0].style.fontSize = \"" + size + "%\";");

size 是一个字符串,可以是从 100%(初始大小)到 110%、120% 和 ...

此方法有效地将 JavaScript 注入到已经存在的内容 (HTML) 中,并且在 Android 5 及更低版本上完美运行,但在 Android 6 上则不行。

在 Android 6 中,当用户点击一个注入 JS 的按钮时,它只是将 webview 的内容替换为size 变量。

谁能帮忙?

【问题讨论】:

    标签: javascript android webview xamarin android-6.0-marshmallow


    【解决方案1】:

    我不知道为什么 webview 的 LoadUrl 方法不起作用,但我刚刚发现了一个新方法 EvaluateJavascript 应该用于 Android 4.4 及更高版本。我刚刚用我的应用(Android 6)对此进行了测试,它运行良好。

    因此,应改用以下代码:(我使用的是 C#/Xamarin)

    if ((int)Build.VERSION.SdkInt >= 19)
    {
        webview.EvaluateJavascript ("document.getElementsByTagName(\"body\")[0].style.fontSize = \"" + size + "%\";", null);
    }
    else
    {
        webview.LoadUrl ("javascript:" + "document.getElementsByTagName(\"body\")[0].style.fontSize = \"" + size + "%\";");
    }
    

    Here there's a Java Example.

    【讨论】:

      猜你喜欢
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多