将 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的内容。
有人能帮忙吗?
我不知道为什么 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.
所以最近我试图通过在清单文件中设置 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的内容。
有人能帮忙吗?
我不知道为什么 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.