2016-03-28 63 views
1

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

在我的应用程序中,我首先使用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变量。

任何人都可以帮忙吗?

回答

0

我不知道为什么LoadUrl方法webview没有工作,但我刚刚发现了一个新的方法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.