将 JavaScript 注入 Android 中的 WebView 6

Injecting JavaScript into WebView in Android 6

所以最近我试图通过在清单文件中设置 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 上无法正常运行。

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

有人能帮忙吗?

我不知道为什么 webviewLoadUrl 方法不起作用,但我刚刚发现一个新方法 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.