22

我正面临一个严重的 android OS Jelly Bean 4.2 错误,在我的程序中,我使用 JavaScript 来获取网页的高度,它在 android 2.2 到 4.1 中完美运行,但是当我尝试在 android 4.2 中使用相同的代码时JavaScript 界面不工作。

我该如何解决这个问题?

4

4 回答 4

46

来自 Android 4.2 文档:

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

来源:Android WebView 文档

于 2012-12-18T20:50:42.030 回答
19

而且,如果你使用 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 类

Ref#: Android Proguard Javascript 接口失败

于 2013-11-15T06:30:32.350 回答
8

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

于 2012-12-17T10:23:52.163 回答
5

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

-keep @interface android.webkit.JavascriptInterface
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
于 2014-08-04T22:07:17.493 回答