¿Cuál es la diferencia entre setWebViewClient
vs setWebChromeClient
en Android?
android
webviewclient
webchromeclient
Pentium10
fuente
fuente
Respuestas:
Del código fuente :
El uso de WebChromeClient le permite manejar cuadros de diálogo, favicons, títulos y el progreso de Javascript. Eche un vistazo a este ejemplo: Agregar soporte de alert () a un WebView
A primera vista, hay demasiadas diferencias WebViewClient y WebChromeClient . Pero, básicamente: si está desarrollando un WebView que no requerirá demasiadas funciones sino que representará HTML, puede usar a
WebViewClient
. Por otro lado, si desea (por ejemplo) cargar el favicon de la página que está representando, debe usar unWebChromeClient
objeto y anular elonReceivedIcon(WebView view, Bitmap icon)
.La mayoría de las veces, si no quieres preocuparte por esas cosas ... puedes hacer esto:
Y su WebView tendrá (en teoría) todas las características implementadas (como el navegador nativo de Android).
fuente
Siento que esta pregunta necesita un poco más de detalles. Mi respuesta está inspirada en la Programación de Android, The Nerd Ranch Guide (2nd edition).
Por defecto , JavaScript está desactivado en WebView. No siempre es necesario tenerlo activado, pero para algunas aplicaciones, es posible que lo requiera.
La carga de la URL debe hacerse después de configurar WebView, por lo que debe hacer eso al final. Antes de eso, active JavaScript llamando
getSettings()
para obtener una instancia de WebSettings y llamandoWebSettings.setJavaScriptEnabled(true)
. WebSettings es la primera de las tres formas en que puede modificar su WebView. Tiene varias propiedades que puede establecer, como la cadena del agente de usuario y el tamaño del texto.Después de eso, configura su WebViewClient. WebViewClient es una interfaz de eventos. Al proporcionar su propia implementación de WebViewClient, puede responder a los eventos de representación. Por ejemplo, podría detectar cuándo el renderizador comienza a cargar una imagen desde una URL particular o decidir si vuelve a enviar una solicitud POST al servidor.
WebViewClient tiene muchos métodos que puede anular, la mayoría de los cuales no tratará. Sin embargo, debe reemplazar la implementación predeterminada de WebViewClient de
shouldOverrideUrlLoading(WebView, String)
. Este método determina qué sucederá cuando se cargue una nueva URL en WebView, como presionando un enlace. Si devuelve verdadero, está diciendo: "No maneje esta URL, la estoy manejando yo mismo". Si devuelve falso, está diciendo: "Continúe y cargue esta URL, WebView, no estoy haciendo nada con ella".La implementación predeterminada dispara una intención implícita con la URL, tal como lo hizo anteriormente. Ahora, sin embargo, este sería un problema grave. Lo primero que hacen algunas aplicaciones web es redirigirlo a la versión móvil del sitio web. Con el WebViewClient predeterminado, eso significa que se le envía de inmediato al navegador web predeterminado del usuario. Esto es justo lo que estás tratando de evitar. La solución es simple: simplemente anule la implementación predeterminada y devuelva false.
Use WebChromeClient para arreglar las cosas. Ya que se está tomando el tiempo para crear su propio WebView, arreglemos un poco agregando una barra de progreso y actualizando los subtítulos de la barra de herramientas con el título de la página cargada.
Para conectar ProgressBar, usará la segunda devolución de llamada en WebView:
WebChromeClient
.WebViewClient es una interfaz para responder a eventos de representación; WebChromeClient es una interfaz de eventos para reaccionar a eventos que deberían cambiar elementos de Chrome alrededor del navegador. Esto incluye alertas de JavaScript, favicons y, por supuesto, actualizaciones para cargar el progreso y el título de la página actual.
Conéctalo
onCreateView(…)
. Uso de WebChromeClient para arreglar las cosas Las actualizaciones de progreso y las actualizaciones de títulos tienen su propio método de devolución de llamada,onProgressChanged(WebView, int)
yonReceivedTitle(WebView, String)
. El progreso que recibeonProgressChanged(WebView, int)
es un número entero de 0 a 100. Si es 100, sabe que la página se está cargando, por lo que oculta la barra de progreso configurando su visibilidad enView.GONE
.fuente