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.
- Problema de enfoque de Android WebView
- Solicitud de publicación de Android WebView con encabezados personalizados
- Appcache en Android Webview no descargar fuentes
- Android WebClient, devolver un recurso de imagen a través de WebResourceResponse - no mostrar la imagen
- Cómo obtener la página en blanco en Android WebViewClient
</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.
- Webview no muestra la fuente Gujarati
- Vista demasiado grande para encajar en la caché de dibujo en Webview dentro de scrollview
- Cómo establecer un título diferente para el cuadro de diálogo de alerta cuando se carga la página WebView?
- JQuery Mobile no funciona en WebView al cargar desde activos locales
- Múltiples WebViews en ScrollView dando problemas (Android)
- Android: reducción de la calidad de los píxeles en las imágenes cargadas en WebView
- Android WebView no muestra animación javascript
- Android: Cómo comprobar la carga exitosa de url al usar webview.loadUrl
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()"); } });
- ¿hay alguna opción para mover el último alfabeto del texto textview algo al alza?
- ¿Cómo detectar el número de dedos utilizados?