studio propiedades examples example app javascript android webview

propiedades - Android 4.2.1, WebView y la interfaz de Javascript se rompen



webview android java (2)

De la documentación de Android 4.2:

Precaución: si ha configurado su targetSdkVersion en 17 o superior, debe agregar la anotación @JavascriptInterface a cualquier método que desee que esté disponible para su código de página web (el método también debe ser público). Si no proporciona la anotación, su página web no podrá acceder al método cuando se ejecute en Android 4.2 o superior.

Tengo una vista web con una interfaz de JavaScript añadida que funciona perfectamente en la mayoría de los dispositivos, a excepción de los que ejecutan Android 4.2.1.

Eliminé la mayor parte del código y me quedé con un código muy básico:

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");

En el lado de JavaScript de las cosas, el código de prueba se ve así:

Android.handshake();

Pero obtengo esto en el logcat:

Consola de E / Web: UnEught TypeError: Objeto [object Object] no tiene ningún método ''handshake''

De nuevo, esta misma cosa exacta funciona bien en dispositivos que tienen un sistema operativo android más antiguo (<4.2.1) que he probado (la versión mínima es 2.3.3).

Lo extraño es que si comienzo un proyecto completamente nuevo, con nada más que una sola actividad que tiene solo una vista web, con el mismo código, todo funciona bien incluso para 4.2.1, pero cuando es parte de mi proyecto real, las cosas se rompen. . No hay nada que esté haciendo con la vista web que no esté incluida en estos fragmentos de código que proporcioné.

Lo que es más extraño para mí es que el javascript encuentra el objeto Android pero simplemente no tiene el método solicitado (handshake), ¿cómo puede ser eso?

Cualquier ayuda será muy apreciada ya que esto me ha estado volviendo loco durante las últimas 2 semanas más o menos (es un error al que vuelvo todo el tiempo, luego me rindo, etc.). Gracias.


Debe anotar métodos (@JavascriptInterface) en la clase Java que quiera poner a disposición de JavaScript.

public class JavaScriptInterface { Context context; JavaScriptInterface(Context c) { context = c; } @JavascriptInterface public void edit(String postid) { Log.d("myApp", "EDIT!"); //do stuff } }

Funcionó para mí Prueba esto