我正面临着一个严重的android OS Jelly Bean 4.2的错误,在我的程序中,我使用JavaScript来获取网页的高度,它完全适用于Android 2.2到4.1但是当我尝试使用相同的代码时android 4.2所以JavaScript界面无法正常工作。
如何解决此问题?
答案 0 :(得分:46)
从Android 4.2文档:
警告:如果已将targetSdkVersion设置为17或更高,则必须将@JavascriptInterface注释添加到您希望网页代码可用的任何方法(该方法也必须是公共的)。如果您未提供注释,则在Android 4.2或更高版本上运行时,您的网页将无法访问该方法。
答案 1 :(得分:18)
而且,如果您使用Proguard,请记住添加此
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-keepattributes JavascriptInterface
-keep public class com.mypackage.MyClass$MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface {
<methods>;
}
如果仍然不行,请添加此
-keepattributes *Annotation*
注意:您的MyJavaScriptInterface必须是Public class
答案 2 :(得分:8)
根据文件:Android doc 从Android 4.2起,您必须使用@JavascriptInterface注释您的方法(并且您的方法必须公开)。
答案 3 :(得分:5)
Proguard配置适用于目标API 17 +:
-keep @interface android.webkit.JavascriptInterface
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}