Javascript界面​​不能与android 4.2一起使用

时间:2012-12-08 06:59:12

标签: javascript android css webview

我正面临着一个严重的android OS Jelly Bean 4.2的错误,在我的程序中,我使用JavaScript来获取网页的高度,它完全适用于Android 2.2到4.1但是当我尝试使用相同的代码时android 4.2所以JavaScript界面​​无法正常工作。

如何解决此问题?

4 个答案:

答案 0 :(得分:46)

从Android 4.2文档:

  

警告:如果已将targetSdkVersion设置为17或更高,则必须将@JavascriptInterface注释添加到您希望网页代码可用的任何方法(该方法也必须是公共的)。如果您未提供注释,则在Android 4.2或更高版本上运行时,您的网页将无法访问该方法。

来源:Android WebView Doc

答案 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

参考号:Android Proguard Javascript Interface Fail

答案 2 :(得分:8)

根据文件:Android doc 从Android 4.2起,您必须使用@JavascriptInterface注释您的方法(并且您的方法必须公开)。

答案 3 :(得分:5)

Proguard配置适用于目标API 17 +:

-keep @interface android.webkit.JavascriptInterface
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}