Qual é a diferença entre o setWebViewClient vs. Setwebchromeclient?
-
26-09-2019 - |
Pergunta
Qual é a diferença entre setWebViewClient
vs. setWebChromeClient
no Android?
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.