Pregunta

¿Cuál es la diferencia entre setWebViewClient vs setWebChromeClient en Android?

¿Fue útil?

Solución

En la código fuente :

// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;

// SOME OTHER SUTFFF.......

/**
 * Set the WebViewClient.
 * @param client An implementation of WebViewClient.
 */
public void setWebViewClient(WebViewClient client) {
    mWebViewClient = client;
}

/**
 * Set the WebChromeClient.
 * @param client An implementation of WebChromeClient.
 */
public void setWebChromeClient(WebChromeClient client) {
    mWebChromeClient = client;
}

El uso de WebChromeClient le permite manejar diálogos Javascript, iconos de página, títulos y el progreso. Echar un vistazo de este ejemplo: Adición (soporte alerta) a un WebView

A primera vista, hay demasiadas diferencias WebViewClient y < a href = "http://developer.android.com/reference/android/webkit/WebChromeClient.html" rel = "noreferrer"> WebChromeClient . Pero, básicamente: si está desarrollando una vista web que no requiere demasiadas características, pero representación HTML, sólo puede utilizar un WebViewClient. Por otro lado, si quieres (por ejemplo) cargar el favicon de la página se renderiza, se debe utilizar un objeto WebChromeClient y anular la onReceivedIcon(WebView view, Bitmap icon).

La mayoría de las veces, si usted no quiere preocuparse por esas cosas ... que sólo puede hacer esto:

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

Y será (en teoría) poseen todas las funciones implementadas su WebView (como el navegador nativo de Android).

Otros consejos

Me siento esta pregunta necesitamos un poco más detalles. Mi respuesta es inspirada de la programación Android, Rancho La Guía del empollón (2ª edición).

Por defecto , JavaScript está desactivado en vista web. No siempre se necesita tenerlo, pero para algunas aplicaciones, puede ser que lo requieren.

Cargando la URL tiene que ser hecho después de configurar la vista Web, por lo que esa última. Antes de eso, el JavaScript habilitado llamando getSettings() para obtener una instancia de WebSettings y llamando WebSettings.setJavaScriptEnabled(true). WebSettings es la primera de las tres formas en que puede modificar su vista Web. Tiene varias propiedades que puede establecer, como el tamaño de la cadena de agente de usuario y el texto.

Después de eso, configura su WebViewClient. WebViewClient es una interfaz de evento. Al proporcionar su propia implementación de WebViewClient, puede responder a eventos de representación. Por ejemplo, se puede detectar cuando el procesador comienza a cargar una imagen desde una URL en particular o decidir si volver a presentar una solicitud POST al servidor.

WebViewClient tiene muchos métodos que se pueden anular, la mayoría de los cuales no se tratar. Sin embargo, sí es necesario para reemplazar la implementación de la WebViewClient por defecto de shouldOverrideUrlLoading(WebView, String). Este método permite determinar lo que sucederá cuando una nueva URL se carga en la vista Web, al igual que al pulsar un enlace. Si devuelve verdadero, que está diciendo, “no manejan este URL, yo estoy manejando yo mismo.” Si devuelve falso, que dice: “Adelante y cargar esta URL, WebView, no estoy haciendo nada con ella .”

La implementación predeterminada dispara una intención implícita con la URL, al igual que lo hizo anteriormente. Ahora, sin embargo, esto sería un problema grave. La primera cosa que algunas aplicaciones web no es redireccionado a la versión móvil de la página web. Con la WebViewClient por defecto, lo que significa que se envían inmediatamente al navegador web por defecto del usuario. Esto es justo lo que está tratando de evitar. La solución es simple - sólo sustituir la implementación predeterminada y volver falsa.

Uso WebChromeClient para arreglar las cosas Puesto que usted está tomando el tiempo para crear su propia vista Web, vamos a arreglarlo un poco mediante la adición de una barra de progreso y la actualización de los subtítulos de la barra de herramientas con el título de la página cargada.

Para conectar el ProgressBar, se utilizará la segunda devolución de llamada en la vista Web:. WebChromeClient

WebViewClient es una interfaz para responder a la prestación de los eventos; WebChromeClient es una interfaz de eventos para reaccionar ante eventos que deberían cambiar los elementos de cromo en todo el navegador. Esto incluye alertas de JavaScript, favicons, y de cambios del curso para el progreso de la carga y el título de la página actual.

conectarlo en onCreateView(…). Usando WebChromeClient a arreglar las cosas Progresar actualizaciones y cambios de título cada uno tiene su propio método de devolución de llamada, onProgressChanged(WebView, int) y onReceivedTitle(WebView, String). El progreso que recibe de onProgressChanged(WebView, int) es un número entero de 0 a 100. Si se trata de 100, ya sabes que la página se carga de hacer, por lo que se oculta la ProgressBar estableciendo su visibilidad a View.GONE.

  

Renuncia: Esta información fue tomada de Programación Android: La Guía de Rancho Grande del empollón con el permiso de los autores. Para más   información sobre este libro o para comprar una copia, por favor visita   bignerdranch.com.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top