Estoy tratando de llamar a algunas javascript
funciones que se encuentran en una html
página que se ejecuta dentro de un android webview
. Bastante simple lo que el código intenta hacer a continuación: desde la aplicación de Android, llame a una javascript
función con un mensaje de prueba, que a su vez llama a una función de Java en la aplicación de Android que muestra el mensaje de prueba a través de una tostada.
La javascript
función se ve así:
function testEcho(message){
window.JSInterface.doEchoTest(message);
}
Desde WebView, he intentado llamar a javascript
las siguientes formas sin suerte:
myWebView.loadUrl("javascript:testEcho(Hello World!)");
mWebView.loadUrl("javascript:(function () { " + "testEcho(Hello World!);" + "})()");
Lo habilité javascript
en elWebView
myWebView.getSettings().setJavaScriptEnabled(true);
// register class containing methods to be exposed to JavaScript
myWebView.addJavascriptInterface(myJSInterface, "JSInterface");
Y aquí está la Java
clase
public class JSInterface{
private WebView mAppView;
public JSInterface (WebView appView) {
this.mAppView = appView;
}
public void doEchoTest(String echo){
Toast toast = Toast.makeText(mAppView.getContext(), echo, Toast.LENGTH_SHORT);
toast.show();
}
}
He pasado mucho tiempo buscando en Google para ver qué puedo estar haciendo mal. Todos los ejemplos que he encontrado utilizan este enfoque. ¿Alguien ve algo mal aquí?
Editar: Hay varios otros javascript
archivos externos a los que se hace referencia y se usan en el html
, ¿podrían ser el problema?
@JavascriptInterface
decorador en los métodos Java que desea poner a disposición de WebView a través de la interfaz de JavaScript.
myWebView.loadUrl("javascript:testEcho('Hello World!')");
, entiendo que ya ha adjuntado el archivo html a esa vista web. ¿Podrías decirme cómo hiciste eso?