Pergunta

Qual é a diferença entre setWebViewClient vs. setWebChromeClient no Android?

Foi útil?

Solução

De Código fonte:

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

O uso do webchromeclient permite lidar com diálogos de JavaScript, favicons, títulos e progresso. Dê uma olhada neste exemplo: Adicionando suporte alert () a um WebView

À primeira vista, existem muitas diferenças WebViewClient & Webchromeclient. Mas, basicamente: se você está desenvolvendo uma visualização da web que não exigirá muitos recursos, mas renderizar html, você pode usar um WebViewClient. Por outro lado, se você quiser (por exemplo) carregar o favicon da página que você está renderizando, você deve usar um WebChromeClient objetar e substituir o onReceivedIcon(WebView view, Bitmap icon).

Na maioria das vezes, se você não quiser se preocupar com essas coisas ... você pode simplesmente fazer isso:

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

E seu WebView (em teoria) terá todos os recursos implementados (como o navegador nativo do Android).

Outras dicas

Eu sinto que essa pergunta precisa de um pouco mais de detalhes. Minha resposta é inspirada na programação do Android, o Nerd Ranch Guide (2ª edição).

Por padrão, JavaScript está desativado no WebView. Você nem sempre precisa ter isso, mas para alguns aplicativos pode exigir.

Carregar o URL deve ser feito após a configuração do WebView, para que você faça isso por último. Antes disso, você liga o JavaScript ligando getSettings() Para obter uma instância de websettings e chamadas WebSettings.setJavaScriptEnabled(true). O WebSettings é a primeira das três maneiras pelas quais você pode modificar seu WebView. Possui várias propriedades que você pode definir, como a sequência do agente do usuário e o tamanho do texto.

Depois disso, você configura seu WebViewClient. WebViewClient é uma interface de evento. Ao fornecer sua própria implementação do WebViewClient, você pode responder à renderização de eventos. Por exemplo, você pode detectar quando o renderizador começar a carregar uma imagem de um URL específico ou decidir se deve reenviar uma solicitação de postagem ao servidor.

WebViewClient Tem muitos métodos que você pode substituir, a maioria dos quais você não lidará. No entanto, você precisa substituir a implementação padrão do WebViewClient de shouldOverrideUrlLoading(WebView, String). Este método determina o que acontecerá quando um novo URL for carregado no WebView, como pressionando um link. Se você retornar verdadeiro, está dizendo: "Não lide com esse URL, eu estou lidando com isso sozinho". Se você retornar falso, está dizendo: "Vá em frente e carregue este URL, WebView, não estou fazendo nada com isso".

A implementação padrão dispara uma intenção implícita com o URL, assim como você fez anteriormente. Agora, porém, isso seria um problema grave. A primeira coisa que alguns aplicativos da Web fazem é redirecioná -lo para a versão móvel do site. Com o WebViewClient padrão, isso significa que você é imediatamente enviado ao navegador da Web padrão do usuário. Isso é exatamente o que você está tentando evitar. A correção é simples - basta substituir a implementação padrão e retornar falsa.

Use webchromeclient para enfeitar as coisasComo você está dedicando um tempo para criar seu próprio WebView, vamos enfeitar um pouco a adição de uma barra de progresso e atualizando a legenda da barra de ferramentas com o título da página carregada.

Para conectar a barra de progresso, você usará o segundo retorno de chamada no WebView: WebChromeClient.

WebViewClient é uma interface para responder a eventos de renderização; O WebChromeclient é uma interface de eventos para reagir a eventos que devem alterar elementos do Chrome ao redor do navegador. Isso inclui alertas de JavaScript, favicons e, claro, atualizações para carregar o progresso e o título da página atual.

Conectar -se onCreateView(…). Usando webchromeclient para aprimorar as atualizações de progresso e atualizações de título, cada um tem seu próprio método de retorno de chamada,onProgressChanged(WebView, int) e onReceivedTitle(WebView, String). O progresso que você recebe de onProgressChanged(WebView, int) é um número inteiro de 0 a 100. Se for 100, você sabe que a página é feita para carregar, então você esconde a barra de progresso, definindo sua visibilidade para View.GONE.

Isenção de responsabilidade: Esta informação foi obtida da programação do Android: o Big Nerd Ranch Guide com permissão dos autores. Para mais informações sobre este livro ou para comprar uma cópia, visite bignerdranch.com.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top