SetWebViewClient ile setWebChromeClient arasındaki fark nedir?


Yanıtlar:


148

Gönderen kaynak kodu :

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

WebChromeClient kullanımı, Javascript diyaloglarını, favicons'larını, başlıklarını ve ilerlemeyi işlemenizi sağlar. Şu örneğe bir göz atın: WebView'a alert () desteği ekleme

İlk bakışta WebViewClient ve WebChromeClient arasında çok fazla fark var . Ancak, temel olarak: HTML oluşturmaktan çok fazla özellik gerektirmeyen bir WebView geliştiriyorsanız, yalnızca bir WebViewClient. Öte yandan, oluşturduğunuz sayfanın favicon'unu (örneğin) yüklemek istiyorsanız, bir WebChromeClientnesne kullanmalı ve onReceivedIcon(WebView view, Bitmap icon).

Çoğu zaman, bu şeyler hakkında endişelenmek istemiyorsanız ... bunu yapabilirsiniz:

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

Ve WebView (teorik olarak) tüm özelliklere sahip olacak (android yerli tarayıcı olarak).


26
Bu formda cevap tam değildir. ChromeClient, numaralandırılmış şeyleri işlemeye izin verir, ancak ViewClient nedir ve benzerlikler ve farklılıklar nelerdir?
Pentium10

3
Bu yöntem, varsayılan web görünümünün bazı zayıf özelliklerini iyileştirmeye yardımcı olur mu? özellikle css3 animasyonları ve geçişleri için?
Ata Iravani

1
Her ikisini birden kullanabilir miyim?
Sergey Dirin

1
@SergeyDirin: stackoverflow.com/a/6475858 . Bu cevaba bakın, ikisini birden kullanabilirsiniz.
hoangtu23

Chrome yoksa, webviewclient'teki kamera izni nasıl işlenir?
j2emanue

100

Bu sorunun biraz daha fazla ayrıntıya ihtiyacı olduğunu düşünüyorum. Cevabım Android Programlama, Nerd Ranch Kılavuzu'ndan (2. baskı) esinlenmiştir.

WebView'da varsayılan olarak JavaScript kapalıdır. Her zaman açık olması gerekmez, ancak bazı uygulamalar için gerektirebilir.

URL'nin yüklenmesi WebView yapılandırıldıktan sonra yapılmalıdır, bu yüzden bunu en son yapmanız gerekir. Bundan önce getSettings(), WebSettings'in bir örneğini almak ve arayarak JavaScript'i açarsınız WebSettings.setJavaScriptEnabled(true). Web Ayarları, WebView'inizi değiştirmenin üç yolundan birincisidir. Kullanıcı aracısı dizesi ve metin boyutu gibi ayarlayabileceğiniz çeşitli özelliklere sahiptir.

Bundan sonra, WebViewClient'inizi yapılandırırsınız. WebViewClient bir olay arabirimidir. Kendi WebViewClient uygulamanızı sağlayarak, oluşturma olaylarına yanıt verebilirsiniz. Örneğin, oluşturucunun belirli bir URL'den ne zaman resim yüklemeye başladığını algılayabilir veya bir POST isteğinin sunucuya yeniden gönderilip gönderilmeyeceğine karar verebilirsiniz.

WebViewClient , çoğunu ele almayacağınız , geçersiz kılabileceğiniz birçok yöntem içerir. Ancak, varsayılan WebViewClient'ın uygulamasını değiştirmeniz gerekir shouldOverrideUrlLoading(WebView, String). Bu yöntem, bir bağlantıya basmak gibi WebView'a yeni bir URL yüklendiğinde ne olacağını belirler. Doğru dönerseniz, “Bu URL'yi işlemeyin, kendim hallediyorum” diyorsunuz. Yanlış döndürürseniz, “Devam edin ve bu URL'yi yükleyin WebView, onunla hiçbir şey yapmıyorum” diyorsunuz.

Varsayılan uygulama, tıpkı daha önce yaptığınız gibi URL ile örtük bir niyet tetikler. Ancak şimdi, bu ciddi bir sorun olacaktır. Bazı Web Uygulamalarının yaptığı ilk şey sizi web sitesinin mobil sürümüne yönlendirmektir. Varsayılan WebViewClient ile, kullanıcının varsayılan web tarayıcısına hemen gönderilirsiniz. Bu kaçınmaya çalıştığınız şey. Düzeltme basit - varsayılan uygulamayı geçersiz kılın ve false değerini döndürün.

Bir şeyleri süslemek için WebChromeClient'i kullanın Kendi WebView'inizi oluşturmak için zaman ayırdığınızdan, bir ilerleme çubuğu ekleyerek ve araç çubuğunun altyazısını yüklenen sayfanın başlığıyla güncelleyerek biraz süsleyelim .

ProgressBar'ı bağlamak için WebView: öğesinde ikinci geri aramayı kullanırsınız WebChromeClient.

WebViewClient, oluşturma olaylarına yanıt vermek için bir arabirimdir; WebChromeClient, tarayıcı çevresindeki krom öğelerini değiştirmesi gereken olaylara tepki veren bir olay arabirimidir. Bu, JavaScript uyarılarını, favicons'ları ve elbette yükleme ilerleme durumu ve geçerli sayfanın başlığı için güncellemeleri içerir.

Takın onCreateView(…). WebChromeClient kullanarak işleri zenginleştirmek için İlerleme güncellemeleri ve başlık güncellemelerinin her birinin kendi geri arama yöntemi vardır onProgressChanged(WebView, int)ve onReceivedTitle(WebView, String). Gelen ilerleme onProgressChanged(WebView, int)0 ile 100 arasında bir tamsayıdır. 100 ise, sayfanın yüklenme işlemini tamamladığını bilirsiniz, böylece görünürlüğünü ayarlayarak ProgressBar öğesini gizlersiniz View.GONE.

Feragatname: Bu bilgiler yazarların izniyle Android Programlama: Büyük Nerd Çiftliği Kılavuzu'ndan alınmıştır. Bu kitap hakkında daha fazla bilgi edinmek veya bir kopyasını satın almak için lütfen bignerdranch.com adresini ziyaret edin.


11
Bence bu cevaplanandan daha iyi bir cevap.
redbeam_
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.