Domanda

Qual è la differenza tra setWebViewClient vs setWebChromeClient in Android?

È stato utile?

Soluzione

Da codice sorgente :

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

Utilizzando WebChromeClient consente di gestire le finestre di dialogo Javascript, favicon, titoli e il progresso. Date un'occhiata di questo esempio: Aggiunta di avviso di supporto () per un WebView

A prima vista, ci sono troppe differenze WebViewClient & < a href = "http://developer.android.com/reference/android/webkit/WebChromeClient.html" rel = "noreferrer"> WebChromeClient . Ma, in fondo: se si sta sviluppando un WebView che non richiederà troppe funzioni, ma il rendering HTML, si può semplicemente utilizzare un WebViewClient. D'altra parte, se si vuole (per esempio) caricare la favicon della pagina che si sta rendering, è necessario utilizzare un oggetto WebChromeClient e ignorare il onReceivedIcon(WebView view, Bitmap icon).

La maggior parte delle volte, se non si vuole preoccupare di queste cose ... si può solo fare questo:

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

E il vostro WebView sarà (in teoria) hanno tutte le caratteristiche implementato (come il browser nativo di Android).

Altri suggerimenti

Credo che questa domanda ha bisogno di un po ' più di dettagli.La mia risposta è ispirato dalla Programmazione Android, Il Nerd Ranch Guide (2 ° edizione).

Per impostazione predefinita, JavaScript è disattivato in WebView.Non sempre bisogno di avere, ma per alcune applicazioni, potrebbe fare lo richiedono.

Il caricamento dell'URL deve essere fatto dopo aver configurato la WebView, quindi, che la scorsa.Prima di questo, è attivare JavaScript sul chiamando getSettings() per ottenere un'istanza di WebSettings e chiamata WebSettings.setJavaScriptEnabled(true).WebSettings è il primo dei tre modi in cui si può modificare la WebView.Ha diverse proprietà che è possibile impostare, come la stringa agente utente e la dimensione del testo.

Dopo di che, si configura la tua WebViewClient.WebViewClient è un evento di interfaccia.Fornendo la propria implementazione di WebViewClient, si può rispondere per gli eventi di rendering.Per esempio, si potrebbe rilevare quando il renderer inizia a caricare un'immagine da un URL specifico o decidere se inviare una richiesta POST al server.

WebViewClient ha molti metodi che è possibile eseguire l'override, la maggior parte dei quali non affrontare.Tuttavia, è necessario sostituire il valore predefinito WebViewClient implementazione di shouldOverrideUrlLoading(WebView, String).Questo metodo determina che cosa accade quando un nuovo URL è caricato nella WebView, come premendo un link.Se si restituisce vero, stai dicendo, “non gestire questa URL, sto gestendo io.” Se si restituisce false, si dice, “Vai avanti e carico di questo URL, WebView, io non sto facendo nulla con esso.”

L'implementazione di default genera un implicito intento con l'URL, proprio come hai fatto in precedenza.Ora, però, questo sarebbe un grave problema.La prima cosa che alcune Applicazioni Web non è reindirizzato alla versione mobile del sito web.Con l'impostazione predefinita WebViewClient, il che significa che si sono immediatamente inviati al browser web predefinito dell'utente.Questo è proprio quello che si sta tentando di evitare.La soluzione è semplice – basta ignorarla e restituire false.

Utilizzare WebChromeClient di abete rosso le cose Dal momento che si sta prendendo il tempo per creare il proprio WebView, cerchiamo di abete e 'un po' aggiungendo una barra di avanzamento e l'aggiornamento della barra degli strumenti di sottotitoli con il titolo della pagina caricata.

Collegare il componente ProgressBar, si utilizzerà la seconda richiamate WebView: WebChromeClient.

WebViewClient è un'interfaccia per rispondere alle rendering eventi;WebChromeClient è un evento di interfaccia per reagire agli eventi, che dovrebbero modificare gli elementi di chrome il browser.Questo include JavaScript avvisi, favicon, e di corsi di aggiornamento per l'avanzamento del caricamento e il titolo della pagina corrente.

Il gancio fino a onCreateView(…).Utilizzando WebChromeClient di abete rosso le cose Aggiornamenti sullo stato di avanzamento e il titolo si aggiorna ogni hanno il loro metodo di callback, onProgressChanged(WebView, int) e onReceivedTitle(WebView, String).Il corso si ricevono da onProgressChanged(WebView, int) è un numero intero da 0 a 100.Se è 100, si sa che la pagina è fatto carico, in modo da nascondere il componente ProgressBar, impostando la sua visibilità View.GONE.

Disclaimer: Queste informazioni sono state tratte dalla Programmazione Android:The Big Nerd Ranch Guide con il permesso degli autori.Per ulteriori informazioni su questo libro o acquistare una copia, si prega di visitare il bignerdranch.com.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top