在Android 6中将JavaScript注入WebView

时间:2016-03-28 06:33:35

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

所以最近我试图通过在清单文件中设置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的按钮时,只需size变量替换 webview的内容。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我不知道为什么LoadUrl webview方法不起作用,但我刚刚发现了应该用于Android 4.4的新方法EvaluateJavascript而且。我刚用我的应用程序(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.