2010-05-14 10 views

Respuesta

119

Desde el source code:

// 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; 
} 

Usando WebChromeClient le permite manejar diálogos Javascript, iconos de página, títulos y el progreso. Echar un vistazo de este ejemplo: Adding alert() support to a WebView

A primera vista, hay demasiadas diferencias WebViewClient & WebChromeClient. Pero, básicamente, si está desarrollando un WebView que no requerirá demasiadas funciones sino que representa HTML, puede simplemente usar un WebViewClient. Por otro lado, si desea (por ejemplo) cargar el icono de la página que está procesando, debe usar un objeto WebChromeClient y anular el onReceivedIcon(WebView view, Bitmap icon).

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 Will (en teoría) han puesto en práctica todas las características de su vista web (como se el navegador nativo de Android).

+20

En este formulario, la respuesta no está completa. ChromeClient permite manejar las cosas enumeradas, pero ¿qué es ViewClient y cuáles son las similitudes y diferencias? – Pentium10

+3

¿Este método ayudará a mejorar algunas características deficientes de la vista web predeterminada? especialmente para css3 animaciones y transiciones? –

+2

No lo creo. – Cristian

19

Creo que esta pregunta necesita un poco más de detalles. Mi respuesta está inspirada en la Programación de Android, The Nerd Ranch Guide (2da edición).

De forma predeterminada,, JavaScript está desactivado en WebView. No siempre es necesario tenerlo activado, pero para algunas aplicaciones, puede que lo requiera.

La carga de la URL debe realizarse después de configurar WebView, por lo que debe hacer esto último. Antes de eso, active JavaScript llamando al getSettings() para obtener una instancia de WebSettings y llamando al WebSettings.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 evento. Al proporcionar su propia implementación de WebViewClient, puede responder a eventos de representación. Por ejemplo, puede detectar cuándo el procesador comienza a cargar una imagen desde una URL determinada o si debe volver a enviar 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, 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 al presionar un enlace. Si responde la verdad, está diciendo: "No maneje esta URL, la manejo yo mismo". Si devuelve falso, está diciendo: "Continúe y cargue esta URL, WebView, no estoy haciendo nada con eso". . "

La implementación predeterminada desencadena un intento implícito 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 WebViewClient predeterminado, eso significa que se lo envía inmediatamente 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 falso.

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, que va a 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 a eventos que deberían cambiar elementos de Chrome en el navegador. Esto incluye alertas de JavaScript, favicons y, por supuesto, actualizaciones para cargar el progreso y el título de la página actual.

conectarlo en onCreateView(…). Usando WebChromeClient para arreglar las cosas actualizaciones de progreso y el título de una actualización 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 realiza la carga, por lo que se oculta la ProgressBar estableciendo su visibilidad a View.GONE.

responsabilidad: 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 obtener más información sobre este libro o para comprar una copia, visite bignerdranch.com.

Cuestiones relacionadas