Ho una visualizzazione Web con interfaccia javascript aggiunta che funziona perfettamente sulla maggior parte dei dispositivi, ad eccezione di quelli con Android 4.2.1.Android 4.2.1, WebView e interruzioni di interfaccia javascript
ho rimosso la maggior parte del codice, e rimase con un codice molto semplice:
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");
Nel lato javascript delle cose del codice di test è simile al seguente:
Android.handshake();
ma ottengo questo nel logcat:
E/Web Console: Uncaught TypeError: Object [object Object] has no method 'handshake'
Ancora una volta, questa stessa cosa esatta funziona bene nei dispositivi che hanno e vecchio sistema operativo Android (< 4.2.1) che ho testato (la versione minima è 2.3.3).
La cosa strana è che se avvio un progetto completamente nuovo, con nient'altro che una singola attività che ha solo una WebView, con lo stesso codice, tutto funziona bene anche per 4.2.1, ma quando fa parte del mio effettivo progetto, le cose si rompono. Non c'è nulla che io stia facendo con la webview che non è inclusa in questo frammento di codice che ho fornito.
Qual è il più strano per me è che la javascript trovi l'oggetto Android ma non ha il metodo richiesto (handshake), come può essere?
Qualsiasi aiuto sarà molto apprezzato poiché questo mi ha fatto impazzire per le ultime 2 settimane o giù di lì (è un bug che torno a sempre, poi mi arrendo, ecc.). Grazie.
Inoltre, è necessario impostare minSdkVersion> = 17, che è 4.2, Jelly bean MR1. A meno che non faccia esattamente quello che ha descritto @ Nitzan-Tomer. Il motivo di questo comportamento è a causa di problemi di sicurezza di Android. –