Подтвердить что ты не робот

Интерфейс Javascript не работает с android 4.2

Я столкнулся с серьезной ошибкой android OS Jelly Bean 4.2, здесь, в моей программе, я использую JavaScript, чтобы получить высоту веб-страницы, и он отлично работает с Android 2.2 до 4.1, но когда я пытался использовать тот же код в android 4.2, поэтому интерфейс JavaScript не работает.

Как я могу исправить эту проблему?

4b9b3361

Ответ 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>;
}