Habilitar JavaScript general en WebViewClient

Mientras busco una respuesta en Google, parece que no soy el único a quien le falta un problema que parece imposible de resolver.

Pude crear una WebView con un WebViewClient personalizado; esto me permite tener un diálogo de proceso y mostrar un mensaje de error si no se puede cargar una URL.

Pero esto crea un problema con JavaScript. La URL que estoy cargando tiene algo de JavaScript que modifica algunos elementos HTML, estilos CSS (mostrar u ocultar el elemento) o redirige a otra ubicación onclick, o incluso quiere mostrar un cuadro de alerta. Pero al usar WebViewClient, ninguno de ellos está funcionando.

Así es como cargo 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 = "" + getString(R.string.lost_connection) + ""; 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 para mí habilitar el JavaScript para el WebViewClient en absoluto? La eliminación de WebViewClient resuelve el problema, pero luego no puedo detectar eventos cuando la página falla o termina de cargarse.

    No sé cuál es su problema exacto, pero puedo habilitar el JavaScript y un WebViewclient personalizado 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); 

    Intenta esto para habilitar javascript

     WebView myWebView = (WebView) findViewById(R.id.webView); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.setWebViewClient(new WebViewClient()); myWebView.loadUrl(url); 

    ¿Las “URL de Javascript” se enrutan a través de shouldOverrideUrlLoading ? Intente comprobar eso y, en caso afirmativo, devuelva false para enlaces como ese (para que la vista web maneje el enlace, no su WebViewClient)

    Qué pasó en mi caso: estaba sirviendo archivos html locales y al momento de presentar mi solicitud

      web.getSettings().setJavaScriptEnabled(true); web.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

    pero luego mis urls dejaron de funcionar. La solución para hacer que JS y href local funcionaran era agregar

      web.getSettings().setAllowFileAccess(true); web.getSettings().setAllowFileAccessFromFileURLs(true); 

    dónde

      web = (WebView) findViewById(R.id.embedded_web); 

    La forma correcta de habilitar JavaScript es agregar las dos líneas siguientes:

     mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

    Incluso si después de agregar que no funciona, intente agregar la línea siguiente.

     mWebView.getSettings().setDomStorageEnabled(true); 

    Ahora debería funcionar. 🙂