Mam widok internetowy z dodanym interfejsem javascript, który działa doskonale na większości urządzeń, z wyjątkiem tych z systemem Android 4.2.1.Android 4.2.1, Przerwy interfejsu WebView i interfejsu javascript
usunąłem większość kodu, i pozostał z kodem bardzo prosty:
this.webView.getSettings().setJavaScriptEnabled(true);
this.webView.setWebChromeClient(new WebChromeClient());
this.webView.addJavascriptInterface(new Object() {
public void handshake() {
Log.d("JS", "handshake no params");
}
public void handshake(String json) {
Log.d("JS", "handshake with params: " + json);
}
}, "Android");
W javascript stronie rzeczy kod testowania wygląda następująco:
Android.handshake();
Ale mam to w LogCat:
E/Web Console: Uncaught TypeError: Object [object Object] has no method 'handshake'
Znowu to samo dokładne działa dobrze w urządzeniach, które są HAV e starsza wersja Androida (< 4.2.1), którą przetestowałem (minimalna wersja to 2.3.3).
Dziwne jest to, że gdy rozpoczynam całkowicie nowy projekt, z samym tylko działaniem, które ma tylko WebView, z tym samym kodem, wszystko działa dobrze nawet dla 4.2.1, ale kiedy jest częścią mojego aktualnego projekt, rzeczy się psują. Nie ma nic, co robię ze stroną internetową, która nie jest zawarta w podanych fragmentach kodu.
Najbardziej dziwne jest to, że javascript znajduje obiekt Androida, ale po prostu nie ma żądanej metody (handshake), jak to możliwe?
Każda pomoc zostanie bardzo doceniona, ponieważ doprowadza mnie to do szału przez ostatnie 2 tygodnie (jest to błąd, do którego wracam cały czas, potem się poddaje, itp.). Dzięki.
Plus, musisz ustawić minSdkVersion> = 17, czyli 4.2, Jelly Bean MR1. Chyba że zrobi dokładnie to, co opisał @ Nitzan-Tomer. Przyczyną tego zachowania są problemy z bezpieczeństwem Androida. –