example android webview webviewclient webchromeclient

example - web view android



¿Son WebViewClient y WebChromeClient mutuamente excluyentes? (2)

A partir de esta gran explicación sobre las diferencias entre WebViewClient y WebChromeClient , parece que si usa una, no debería usar la otra (para el mismo objeto WebView).

Es mi entendimiento correcto?

De lo contrario, ¿cuándo se utilizarían WebViewClient y WebChromeClient para el mismo objeto WebView ?

¿Hay algún ejemplo de una situación en la que solo usar WebViewClient y WebChromeClient para el mismo objeto WebView logre un objetivo determinado?


Ciertamente puedes usar ambos, solo tienen diferentes funciones. Establecer su propio WebViewClient personalizado le permite manejar en PageFinished, shouldOverrideUrlLoading, etc., WebChromeClient le permite manejar la alerta de Javascript () y otras funciones.

Solo crea tu propia clase, por ejemplo:

public class MyWebChromeClient extends WebChromeClient { //Handle javascript alerts: @Override public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) { Log.d("alert", message); Toast.makeText(context, message, 3000).show(); result.confirm(); return true; }; ...

y / o

public class MyWebViewClient extends WebViewClient { @Override //Run script on every page, similar to Greasemonkey: public void onPageFinished(WebView view, String url) { view.loadUrl("javascript:alert(''hi'')"); } ...

Simplemente anule las funciones descritas en la documentación, luego configure su cliente en onCreate con:

webview.setWebViewClient(new MyWebViewClient()); webview.setWebChromeClient(new MyWebChromeClient());


Puede usar ambos clientes simultáneamente. Es útil ya que ambos proporcionan diferentes funcionalidades.

Por ejemplo, si desea:

  • seguir redireccionamientos en la vista web en lugar de abrir el navegador disponible

y

  • rastrear el progreso de carga

que son imposibles con solo uno de los clientes , puede hacer lo siguiente:

WebView webView = (WebView) findViewById(R.id.web_view); webView.setWebViewClient(new WebViewClient()); webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); // Your custom code. } });

Como la implementación predeterminada del método shouldOverrideUrlLoading (WebView, String) se puede usar tal cual para el caso mencionado anteriormente, no hay necesidad de anularla a menos que desee otro comportamiento.