Habilitación de JavaScript general en WebViewClient
Mientras buscas una respuesta en google, parece que no soy el único atrapado con un problema que parece imposible de resolver.
He logrado crear un WebView con un WebViewClient personalizado, lo que hace posible que tenga un diálogo de proceso y muestre un mensaje de error si no se puede cargar una URL.
- El controlador onScaleChanged de WebView se llama varias veces
- Habilitación de protocolos SSL específicos con Android WebViewClient
- El bloqueo del sistema al reemplazar shouldInterceptRequest en WebViewClient
- ShouldOverrideUrlLoading se llama SOLAMENTE para ALGUNAS páginas web
- Cómo establecer un título diferente para el cuadro de diálogo de alerta cuando se carga la página WebView?
Pero esto crea un problema con JavaScript. La URL que estoy cargando tiene algún JavaScript que cambia algunos elementos HTML de los estilos CSS (mostrar u ocultar el elemento) o redirecciona a otra ubicación onclick – o tal vez incluso quiera mostrar un cuadro de alerta. Sin embargo, al utilizar WebViewClient, ninguno de ellos funciona.
Así es como carga una página:
public void loadUrl(String url) { final ProgressDialog dialog = ProgressDialog.show(myActivity.this, "", getString(R.string.loading), true); final WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setVerticalScrollBarEnabled(false); myWebView.setHorizontalScrollBarEnabled(false); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Toast.makeText(myActivity.this, url, Toast.LENGTH_SHORT).show(); //Debugging purposes if (url.endsWith(".mp4")) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(url), "video/mp4"); view.getContext().startActivity(intent); } else { view.loadUrl(url); } return true; } public void onPageFinished(WebView view, String url) { //Toast.makeText(myActivity.this, "Oh no!", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(myActivity.this, description, Toast.LENGTH_SHORT).show(); String summary = "<html><body><strong>" + getString(R.string.lost_connection) + "</body></html>"; myWebView.loadData(summary, "text/html", "utf-8"); } }); //End WebViewClient myWebView.loadUrl(url); }
Esto probablemente podría hacerse de una manera más inteligente, pero soy nuevo en el desarrollo de Java y Android …
¿Es posible que active JavaScript para WebViewClient? La eliminación de WebViewClient soluciona el problema, pero no puedo detectar eventos cuando la página se ha producido un error o se ha terminado de cargar.
- Deje de cargar en webViewClient
- Webview - cambiar la fuente de la página antes de mostrar el sitio web?
- Log <GATE-M> DEV_ACTION_COMPLETED </ GATE-M> parece retrasar la ejecución en Android
- Android JS en WebView.loadUrl ()
- Cargar la imagen en caché de WebView en un ImageView
- ShouldOverrideUrlLoading (...) no se ejecuta si "window.location.href" modificado en una devolución de llamada de tiempo de espera
- ShouldOverrideUrlLoading no funciona / captura los clics del enlace mientras la página se está cargando
- Proguard warning biblioteca clase android.webkit.WebView depende de la clase del programa android.webkit.WebViewClien
No sé cuál es su problema exacto, pero puedo permitir el Javascript y un WebViewclient
encargo sin ningún problema:
WebView vistaWeb = (WebView) findViewById(R.id.webview); vistaWeb.setWebChromeClient(new MyCustomChromeClient(this)); vistaWeb.setWebViewClient(new MyCustomWebViewClient(this)); vistaWeb.clearCache(true); vistaWeb.clearHistory(); vistaWeb.getSettings().setJavaScriptEnabled(true); vistaWeb.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
¿Las URLs Javascript se enrutan a través de shouldOverrideUrlLoading
? Prueba a comprobar que y si es así, devuelve false
para enlaces como ese (para que la vista web maneje el enlace, no tu WebViewClient)
- NDK – Cómo utilizar una biblioteca .so generada en otro proyecto
- Cómo tener el centro de imagen y texto dentro de un botón