Интерфейс Javascript не работает с android 4.2
Я столкнулся с серьезной ошибкой android OS Jelly Bean 4.2, здесь, в моей программе, я использую JavaScript, чтобы получить высоту веб-страницы, и он отлично работает с Android 2.2 до 4.1, но когда я пытался использовать тот же код в android 4.2, поэтому интерфейс JavaScript не работает.
Как я могу исправить эту проблему?
Ответы
Ответ 1
Из документации Android 4.2:
Внимание: если вы установили targetSdkVersion в 17 или выше, вы должны добавить аннотацию @JavascriptInterface к любому методу, по которому вы хотите получить код своей веб-страницы (этот метод также должен быть общедоступным). Если вы не предоставите аннотацию, метод не будет доступен вашей веб-странице при работе на Android 4.2 или выше.
Источник: Android WebView Doc
Ответ 2
И если вы используете 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 должен быть открытым классом
Ссылка #: Неисправность интерфейса Javascript для Android Proguard
Ответ 3
Согласно документу doc: Android
Начиная с Android 4.2 вы должны аннотировать свой метод с помощью @JavascriptInterface (и ваш метод должен быть общедоступным).
Ответ 4
Конфигурация Proguard, которая работает для меня с целевым API 17 +:
-keep @interface android.webkit.JavascriptInterface
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}