Cómo llamar al método Javascript desde la vista web en Android

Estoy tratando de llamar a un método javascript definido en una página html desde dentro de webview. La función no se está llamando, y no veo ningún error en el registro.

Este es un archivo html.

</head> <body> <script type="text/javascript"> function callJS(){ $.ajax({url:"http://10.0.2.2:5010"}); } </script> </body> </html> 

Y este es el código Java en una actividad en android

  WebView webView = new WebView(this); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("file:///android_asset/temp.html"); webView.loadUrl("javascript:callJS()"); 

No estoy seguro de cómo depurar esto. Cuando agrego un onload=callJS() en la etiqueta del cuerpo en html, veo la llamada alejada que es hecha. Por lo tanto, parece que mi HTML está bien, y se está cargando en webview. Sin embargo, webview no es capaz de llamar a método javascript directamente.

Debe ejecutar la función javascript cuando se carga la página

 webView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { webView.loadUrl("javascript:callJS()"); } }); 

Cuando pones onload=callJS() significa que la función javascript será llamada cuando la página está cargada. Para depurar, puedes poner console.log ("tu texto aquí") en tu función javascript y lo obtendrás en tu registro de estudio de Android. (Comúnmente con la etiqueta I/chromium ). De lo contrario, puede utilizar depuración remota en Android con Chrome. La documentación aquí en https://developer.chrome.com/devtools/docs/remote-debugging .

Prueba esto de una vez:

Código de la actividad:

 public class MainActivity extends AppCompatActivity { private WebView mWebView = null; private ProgressBar mLoading; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.mWebView = (WebView)findViewById(R.id.wvPortal); mLoading = (ProgressBar) findViewById(R.id.pbLoading); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); webSettings.setSupportZoom(true); webSettings.setLoadWithOverviewMode(true); webSettings.setUseWideViewPort(true); webSettings.setSupportMultipleWindows(true); mWebView.getSettings().setDomStorageEnabled(true); mWebView.setWebChromeClient(new WebChromeClient()); /* To keep page navigation within the WebView and hence within the app, we need to create a subclass of WebViewClient,and override its shouldOverrideUrlLoading(WebView webView, String url) method.*/ WebViewClientImpl webViewClient = new WebViewClientImpl(this); mWebView.setWebViewClient(webViewClient); mWebView.loadUrl("file:///android_asset/www/index.html"); WebSettings mWebSettings = mWebView.getSettings(); mWebSettings.setJavaScriptEnabled(true); Log.d("Test 0","Interface calls"); //calling javascript interface: // 1st.parameter is the JavaScript interface object itself. // 2nd.parameter is the name of the global JavaScript variable which the JavaScript interface object is bound to. mWebView.addJavascriptInterface(new AppJavaScriptProxy(this,mWebView), "androidAppProxy"); } } 

Clase AppJavaScriptProxy para la interfaz creationg:

 public class AppJavaScriptProxy { private Activity activity = null; private WebView webView = null; public AppJavaScriptProxy(Activity activity,WebView webview) { this.activity = activity; this.webView = webview; Log.d("Test 1","in Interface"); } @JavascriptInterface public void showMessage(final String message) { Log.d("from javascript", "" + message); final Activity theActivity = this.activity; final WebView theWebView = this.webView; this.activity.runOnUiThread(new Runnable() { @Override public void run() { if (!theWebView.getUrl().startsWith("file:///android_asset/www/index.html")) { return; } Toast toast = Toast.makeText( theActivity.getApplicationContext(), message, Toast.LENGTH_SHORT); toast.show(); } }); } } 

Index.html llama a este script en la página html.

 <input type="button" value="call Methode" onClick="showMessage("Message from JavaScript")" /> <script> if(typeof androidAppProxy !== "undefined"){ androidAppProxy.showMessage("Message from JavaScript"); } else { alert("Running outside Android app"); } </script> 

llame a este script en cualquier botón haga clic en la página de índice de vista web. Árbitro. Creación de webapps en la vista web

Si el fragmento de código anterior le ayuda a votar por favor mi respuesta. ¡Gracias!

escribe tu código como este

 WebView webView = new WebView(this); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("file:///android_asset/temp.html"); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { view.loadUrl("javascript:callJS()"); } }); 
  • La vista Web de Android da el mensaje net :: ERR_CACHE_MISS
  • RecyclerView se desplaza automáticamente a WebView / Fresco Elemento SimpleDraweeView
  • Llame al método "shouldOverrideUrlLoading" en webview.goBack ()
  • ¿Cómo acceder a los activos locales desde una URL remota en Android WebView?
  • ¿Cómo detengo Flash después de dejar un WebView?
  • Android webview + javascript no mostrar la salida en android 4.0.x, 3.x
  • Interceptar llamada de red desde Android Java / JNI
  • Mostrar círculo de actividades antes de cargar la vista web - Android
  • Soporte de TLS v1.2 en Webview Android
  • Android PhoneGap obtener guiñada, tono, rollo, relativo a las coordenadas de tierra
  • Android / PhoneGap: destruir la vista web cuando se va de fondo en lugar de keepRunning = false
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.