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

Rav*_*avi 21 javascript css android webview

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

我该如何解决这个问题?

jlo*_*son 46

从Android 4.2文档:

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

来源:Android WebView Doc

  • 哇靠!我无法相信找到这篇文章也有多久.它应该抛出错误或SOMETHING让我知道发生了什么! (4认同)

Fra*_*yen 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>; 
}
Run Code Online (Sandbox Code Playgroud)

如果仍然不行,请添加此项

-keepattributes *Annotation*
Run Code Online (Sandbox Code Playgroud)

注意:您的MyJavaScriptInterface必须是Public类

参考号:Android Proguard Javascript接口失败


小智 8

根据doc:Android doc 自Android 4.2起,您必须使用@JavascriptInterface注释您的方法(并且您的方法必须是公共的).


And*_*yul 5

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

-keep @interface android.webkit.JavascriptInterface
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
Run Code Online (Sandbox Code Playgroud)