2011-12-28 18 views

Respuesta

13

Android sólo puede llamar al método javascript si una página HTML está cargado en la web View

webView.loadUrl("javascript:hello()"); 

llamará hola método writen en la página HTML sólo si la página que contiene este método está cargado actualmente en el control WebView

primera llamada

webview.loadUrl("Your html page url"); 

luego llamar

webView.loadUrl("javascript:hello()"); 
+2

He habilitado todo lo dicho en las respuestas 1 y 2.Pero nada funciona. – Smitha

+0

por favor revise su página html en el navegador y comprueba si hay algún error en su página html javascript ... – Talha

+0

La solución está funcionando sin problemas con los argumentos en el método javascript. Buena esa. – Krystian

3

Antes de utilizar JavaScript, primero tiene que comprobar que Javascript está habilitado o no en su aplicación usando "getJavaScriptEnabled()" (es FALSE por defecto). Y el método loadUrl() solo se usa para cargar la página actual solamente. No hace nada relacionado con JavaScript.

Ejemplo:

Configuración de WebView

// inicialización de vista web

webView = (WebView) findViewById(R.id.webView); 
WebSettings webSettings = webView.getSettings(); 
webSettings.setJavaScriptEnabled(true); 

Cargando HTML en WebView

webView.loadUrl("file:///android_asset/testhtml.html"); 

WebChromeClient Ajuste a web View

webView.setWebChromeClient(new MyJavaScriptChromeClient()); 

Clase MyJavaScriptChromeClient Aquí tenemos que anular el método JsAlert() para manejar la función de alerta de JavaScript.

private class MyJavaScriptChromeClient extends WebChromeClient { 
    @Override 
    public boolean onJsAlert(WebView view, String url, String message,final JsResult result) { 
//handle Alert event, here we are showing AlertDialog 
    new AlertDialog.Builder(MainWebViewActivity.this) 
     .setTitle("JavaScript Alert !") 
     .setMessage(message) 
     .setPositiveButton(android.R.string.ok, 
      new AlertDialog.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        // do your stuff 
        result.confirm(); 
       } 
      }).setCancelable(false).create().show(); 
    return true; 
    } 
} 

Mi archivo HTML: testhtml.html:

<html> 

    <body > 

    <div onclick="alert('hello')"> Click Me !! </div> 

    </body> 

</html> 

Cómo funciona? Cuando el texto "¡Haga clic en mí!" en el WebView se hace clic, se llama a la función de Android en JsAlert (vista de WebView, url de cadena, mensaje de cadena, resultado de JsResult final). El parámetro para alertar se copia al parámetro de mensaje de la función onJsAlert. Y el resto del manejo se hace allí. Aquí mostramos un AlertDialog.

10

Por si alguien tiene algún problema con este como lo hice, es necesario llamar a su función de JavaScript después de que la página ha terminado de cargar de lo contrario el javascript no se llamará:

webviewer.loadUrl("file:///android_asset/mypage.html"); 
    webviewer.setWebViewClient(new WebViewClient() { 

     public void onPageFinished(WebView view, String url) 
     { 
      webviewer.loadUrl("javascript:hello()"); 
     } 
    }); 
Cuestiones relacionadas