Apa perbedaan antara setWebViewClient
vs setWebChromeClient
di Android?
android
webviewclient
webchromeclient
Pentium10
sumber
sumber
Jawaban:
Dari kode sumber :
Menggunakan WebChromeClient memungkinkan Anda untuk menangani dialog Javascript, favicon, judul, dan perkembangannya. Lihatlah contoh ini: Menambahkan dukungan lansiran () ke WebView
Sekilas, ada terlalu banyak perbedaan WebViewClient & WebChromeClient . Tetapi, pada dasarnya: jika Anda mengembangkan WebView yang tidak membutuhkan terlalu banyak fitur selain rendering HTML, Anda bisa menggunakan a
WebViewClient
. Di sisi lain, jika Anda ingin (misalnya) memuat favicon halaman yang Anda render, Anda harus menggunakanWebChromeClient
objek dan menimpaonReceivedIcon(WebView view, Bitmap icon)
.Sering kali, jika Anda tidak ingin khawatir tentang hal-hal itu ... Anda bisa melakukan ini:
Dan WebView Anda (secara teori) akan menerapkan semua fitur (sebagai browser asli android).
sumber
Saya merasa pertanyaan ini perlu sedikit lebih detail. Jawaban saya terinspirasi dari Pemrograman Android, The Nerd Ranch Guide (edisi ke-2).
Secara default , JavaScript tidak aktif di WebView. Anda tidak selalu harus mengaktifkannya, tetapi untuk beberapa aplikasi, mungkin memang membutuhkannya.
Memuat URL harus dilakukan setelah mengonfigurasi WebView, jadi Anda melakukan yang terakhir. Sebelum itu, Anda mengaktifkan JavaScript dengan menelepon
getSettings()
untuk mendapatkan instance dari WebSettings dan meneleponWebSettings.setJavaScriptEnabled(true)
. WebSettings adalah yang pertama dari tiga cara Anda dapat memodifikasi WebView Anda. Ini memiliki berbagai properti yang dapat Anda atur, seperti string agen pengguna dan ukuran teks.Setelah itu, Anda mengkonfigurasi WebViewClient Anda. WebViewClient adalah antarmuka acara. Dengan menyediakan implementasi WebViewClient Anda sendiri, Anda dapat merespons acara rendering. Misalnya, Anda bisa mendeteksi kapan pemberi render mulai memuat gambar dari URL tertentu atau memutuskan apakah akan mengirim kembali permintaan POST ke server.
WebViewClient memiliki banyak metode yang bisa Anda timpa, yang sebagian besar tidak akan Anda tangani. Namun, Anda harus mengganti implementasi WebViewClient default untuk
shouldOverrideUrlLoading(WebView, String)
. Metode ini menentukan apa yang akan terjadi ketika URL baru dimuat di WebView, seperti dengan menekan tautan. Jika Anda mengembalikan true, Anda mengatakan, "Jangan menangani URL ini, saya sendiri yang menangani." Jika Anda mengembalikan false, Anda berkata, "Silakan memuat URL ini, WebView, saya tidak melakukan apa-apa dengannya."Implementasi default meluncurkan maksud tersirat dengan URL, seperti yang Anda lakukan sebelumnya. Namun, sekarang, ini akan menjadi masalah besar. Hal pertama yang dilakukan oleh beberapa Aplikasi Web adalah mengarahkan Anda ke versi mobile situs web. Dengan WebViewClient default, itu berarti Anda segera dikirim ke browser web default pengguna. Inilah yang ingin Anda hindari. Cara mengatasinya sederhana - cukup timpa implementasi default dan kembalikan false.
Gunakan WebChromeClient untuk merapikan segalanya Karena Anda meluangkan waktu untuk membuat WebView Anda sendiri, mari kita sedikit merapikannya dengan menambahkan bilah kemajuan dan memperbarui subtitle bilah alat dengan judul halaman yang dimuat.
Untuk menghubungkan ProgressBar, Anda akan menggunakan callback kedua pada WebView:
WebChromeClient
.WebViewClient adalah antarmuka untuk merespons acara rendering; WebChromeClient adalah antarmuka acara untuk bereaksi terhadap peristiwa yang seharusnya mengubah elemen chrome di browser. Ini termasuk peringatan JavaScript, favicon, dan tentu saja pembaruan untuk memuat progres dan judul halaman saat ini.
Hubungkan
onCreateView(…)
. Menggunakan WebChromeClient untuk merapikan segalanya. Kemajuan pembaruan dan pembaruan judul masing-masing memiliki metode panggilan balik sendiri,onProgressChanged(WebView, int)
danonReceivedTitle(WebView, String)
. Kemajuan yang Anda terima darionProgressChanged(WebView, int)
adalah bilangan bulat dari 0 hingga 100. Jika 100, Anda tahu bahwa halaman tersebut selesai dimuat, jadi Anda menyembunyikan ProgressBar dengan mengatur visibilitasnya keView.GONE
.sumber