ข้อแตกต่างระหว่างsetWebViewClient
vs. setWebChromeClient
ใน Android คืออะไร
ข้อแตกต่างระหว่างsetWebViewClient
vs. setWebChromeClient
ใน Android คืออะไร
คำตอบ:
จากซอร์สโค้ด :
// 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 ช่วยให้คุณสามารถจัดการไดอะล็อก Javascript favicons ชื่อเรื่องและความคืบหน้าได้ ดูตัวอย่างนี้: การเพิ่มการสนับสนุน alert () ใน WebView
ได้อย่างรวดเร็วก่อนมีความแตกต่างมากเกินไปWebViewClient & WebChromeClient แต่โดยทั่วไปถ้าคุณกำลังพัฒนา WebView ที่จะไม่จำเป็นต้องมีคุณสมบัติมากเกินไป แต่การแสดงผล HTML WebViewClient
คุณก็สามารถใช้ ในทางกลับกันถ้าคุณต้องการ (ตัวอย่างเช่น) โหลด favicon ของหน้าคุณจะแสดงผลที่คุณควรใช้วัตถุและแทนที่WebChromeClient
onReceivedIcon(WebView view, Bitmap icon)
ส่วนใหญ่แล้วหากคุณไม่ต้องการกังวลเกี่ยวกับสิ่งเหล่านั้น ... คุณสามารถทำสิ่งนี้ได้:
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
และ WebView ของคุณจะ (ในทางทฤษฎี) มีคุณสมบัติทั้งหมดที่ใช้งาน (เป็นเบราว์เซอร์เนนของ Android)
ฉันรู้สึกว่าคำถามนี้ต้องการรายละเอียดอีกเล็กน้อย คำตอบของฉันได้รับแรงบันดาลใจจากการเขียนโปรแกรม Android, The Nerd Ranch Guide (รุ่นที่ 2)
ตามค่าเริ่มต้น JavaScript จะปิดใน WebView คุณไม่จำเป็นต้องเปิดใช้เสมอ แต่สำหรับบางแอพอาจจำเป็นต้องใช้
การโหลด URL จะต้องทำหลังจากกำหนดค่า WebView ดังนั้นคุณต้องดำเนินการครั้งสุดท้าย ก่อนที่คุณเปิด JavaScript บนโดยการเรียกgetSettings()
เพื่อให้ได้ตัวอย่างของ WebSettings WebSettings.setJavaScriptEnabled(true)
และโทร WebSettings เป็นวิธีแรกในสามวิธีที่คุณสามารถแก้ไข WebView ของคุณ มันมีคุณสมบัติต่าง ๆ ที่คุณสามารถตั้งค่าเช่นสตริงตัวแทนผู้ใช้และขนาดตัวอักษร
หลังจากนั้นคุณกำหนดค่า WebViewClient ของคุณ WebViewClient เป็นอินเทอร์เฟซเหตุการณ์ ด้วยการให้การใช้ WebViewClient ของคุณเองคุณสามารถตอบสนองต่อการแสดงผลเหตุการณ์ ตัวอย่างเช่นคุณสามารถตรวจพบเมื่อตัวแสดงเริ่มโหลดภาพจาก URL ที่ระบุหรือตัดสินใจว่าจะส่งคำขอ POST ไปยังเซิร์ฟเวอร์อีกครั้ง
WebViewClientมีหลายวิธีที่คุณสามารถแทนที่ซึ่งส่วนใหญ่คุณจะไม่จัดการ แต่คุณจะต้องเปลี่ยนการดำเนินงาน WebViewClient shouldOverrideUrlLoading(WebView, String)
เริ่มต้นของ วิธีนี้จะกำหนดสิ่งที่จะเกิดขึ้นเมื่อโหลด URL ใหม่ใน WebView เช่นโดยการกดลิงค์ หากคุณกลับมาจริงคุณกำลังพูดว่า“ อย่าจัดการ URL นี้ฉันจัดการเอง” หากคุณส่งคืนเท็จคุณกำลังพูดว่า“ เอาเลยโหลด URL นี้ WebView ฉันไม่ได้ทำอะไรเลย”
การใช้งานเริ่มต้นจะทำให้เกิดความตั้งใจโดยนัยกับ URL เช่นเดียวกับที่คุณทำก่อนหน้านี้ แม้ว่าตอนนี้อาจเป็นปัญหาที่รุนแรง สิ่งแรกที่บางแอปพลิเคชั่นบนเว็บทำคือนำคุณไปยังเว็บไซต์สำหรับมือถือ ด้วย WebViewClient เริ่มต้นนั่นหมายความว่าคุณจะถูกส่งไปยังเว็บเบราว์เซอร์เริ่มต้นของผู้ใช้ทันที นี่เป็นเพียงสิ่งที่คุณพยายามหลีกเลี่ยง การแก้ไขนั้นง่าย - เพียงแค่แทนที่การเริ่มต้นใช้งานและส่งคืนค่าเท็จ
ใช้ WebChromeClient เพื่อ spruce สิ่งต่าง ๆ ขึ้นมา เนื่องจากคุณสละเวลาในการสร้าง WebView ของคุณเองให้ spruce มันขึ้นมาเล็กน้อยโดยการเพิ่มแถบความคืบหน้าและอัปเดตคำบรรยายของแถบเครื่องมือด้วยชื่อเรื่องของหน้าที่โหลด
ที่จะขอขึ้น ProgressBar คุณจะใช้โทรกลับที่สองใน WebChromeClient
WebView:
WebViewClient เป็นอินเทอร์เฟซสำหรับตอบสนองต่อการแสดงผลเหตุการณ์ WebChromeClient เป็นอินเทอร์เฟซเหตุการณ์สำหรับตอบสนองต่อเหตุการณ์ที่ควรเปลี่ยนองค์ประกอบของโครมรอบเบราว์เซอร์ ซึ่งรวมถึงการแจ้งเตือน JavaScript, favicons และการปรับปรุงหลักสูตรสำหรับความคืบหน้าในการโหลดและชื่อของหน้าปัจจุบัน
onCreateView(…)
ตะขอขึ้นใน ใช้ WebChromeClient กับสิ่งโก้เก๋การอัปเดตความคืบหน้าและชื่อการปรับปรุงแต่ละคนมีวิธีการโทรกลับของตัวเอง
และonProgressChanged(WebView, int)
onReceivedTitle(WebView, String)
ความคืบหน้าคุณได้รับจากonProgressChanged(WebView, int)
เป็นจำนวนเต็มจาก 0 ถึง 100 ถ้าเป็น 100 คุณรู้ว่าหน้านี้มีการโหลดทำเพื่อให้คุณซ่อน ProgressBar View.GONE
โดยการตั้งค่าการแสดงผลในการ
คำเตือน:ข้อมูลนี้นำมาจากการเขียนโปรแกรม Android: The Big Nerd Ranch Guide ได้รับอนุญาตจากผู้เขียน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับหนังสือเล่มนี้หรือสั่งซื้อสำเนากรุณาเยี่ยมชม bignerdranch.com