studio example evaluatejavascript android webview webviewclient

android - example - webview evaluatejavascript



Habilitar JavaScript general en WebViewClient (3)

¿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)

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 = "<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 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);