Android中的setWebViewClient
與setWebChromeClient
有什麼區別?setWebViewClient與setWebChromeClient有什麼區別?
回答
// 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對話框,網站圖標,標題和進度。看一下這個例子:Adding alert() support to a WebView
乍一看,有太多的區別WebViewClient & WebChromeClient。但是,基本上:如果您正在開發不需要太多功能但呈現HTML的WebView,則可以使用WebViewClient
。另一方面,如果您想(例如)加載正在呈現的頁面的圖標,則應使用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編程,書呆子牧場指南(第二版)的啓發。
默認情況下,,JavaScript在WebView中關閉。你並不總是需要它,但對於某些應用程序,可能需要它。
加載URL必須在配置完WebView後完成,所以最後要做。在此之前,您通過調用getSettings()
來打開JavaScript以獲取WebSettings實例並調用WebSettings.setJavaScriptEnabled(true)
。 WebSettings是您可以修改WebView的三種方法中的第一種。它具有可以設置的各種屬性,如用戶代理字符串和文本大小。
之後,您將配置您的WebViewClient。 WebViewClient是一個事件接口。通過提供您自己的WebViewClient實現,您可以響應渲染事件。例如,您可以檢測渲染器何時開始從特定URL加載圖像,或者決定是否向服務器重新提交POST請求。
WebViewClient有許多方法可以覆蓋,其中大多數方法你不會處理。但是,您確實需要替換默認的WebViewClient的實現shouldOverrideUrlLoading(WebView, String)
。此方法確定在WebView中加載新URL時會發生什麼情況,例如通過按鏈接。如果返回true,則說「不處理這個URL,我正在處理它」。如果您返回false,則表示「繼續並加載此URL,WebView,我沒有對它做任何處理。「
默認實現會引發URL的隱式意圖,就像您之前做的一樣。但現在,這將是一個嚴重的問題。某些Web應用程序所做的第一件事是將您重定向到網站的移動版本。使用默認的WebViewClient,這意味着您可以立即發送到用戶的默認Web瀏覽器。這正是你想要避免的。 修復很簡單 - 只需重寫默認實現並返回false。
使用WebChromeClient雲杉東西 既然你正在創建自己的WebView,讓我們通過添加一個進度條,並與加載頁面的標題更新工具欄上的字幕雲杉它一點時間。
要連接ProgressBar,您將在WebView上使用第二個回調:WebChromeClient。
WebViewClient是一個響應渲染事件的接口; WebChromeClient是一個事件接口,用於響應那些應該改變瀏覽器周圍鉻元素的事件。這包括JavaScript警報,網站圖標,當然還有更新加載進度和當前頁面的標題。
掛在onCreateView(…)
。使用WebChromeClient修飾事物 進度更新和標題更新每個都有自己的回調方法, onProgressChanged(WebView, int)
和onReceivedTitle(WebView, String)
。您從onProgressChanged(WebView, int)
收到的進度是一個從0到100的整數。如果它是100,那麼您知道 頁面已完成加載,因此通過將ProgressBar的可見性設置爲View.GONE
來隱藏ProgressBar。
免責聲明:這一信息是取自Android的程序設計:大書呆子牧場指南從作者的許可。欲瞭解更多 有關此書的信息或購買副本,請訪問 bignerdranch.com。
- 1. 繼承與類別有什麼區別
- 2. 有什麼區別
- 3. 有什麼區別
- 4. 有什麼區別?
- 5. 有什麼區別?
- 6. 有什麼區別?
- 7. 有什麼區別
- 8. 有什麼區別?
- 9. 有什麼區別?
- 10. 有什麼區別
- 11. 有什麼區別
- 12. float x []與float [] x有什麼區別?
- 13. Gateway與Service Activator有什麼區別?
- 14. Directory.EnumerateFiles與Directory.GetFiles有什麼區別?
- 15. LinkedHashMaps與LinkedHashSets有什麼區別?
- 16. 未來與未來有什麼區別?
- 17. org.hibernate.dialect.PostgresPlusDialect與org.hibernate.dialect.PostgreSQL9Dialect有什麼區別?
- 18. WallpaperManager.getInstance()與getSystemService(Context.WALLPAPER_SERVICE)有什麼區別
- 19. 返回與否有什麼區別?
- 20. Char.IsDigit()與Char.IsNumber()有什麼區別?
- 21. OleDB與SQLClient有什麼區別?
- 22. Rack與Passenger有什麼區別?
- 23. Tableau與Pentaho:有什麼區別?
- 24. 數組與對象有什麼區別?
- 25. perror和fprintf與stderr有什麼區別?
- 26. SocketConnection與DCOM連接有什麼區別
- 27. reactjs與nextjs有什麼區別
- 28. 微服務與webservices有什麼區別?
- 29. ERROR_PATH_NOT_FOUND與ERROR_FILE_NOT_FOUND有什麼區別?
- 30. MSP430與MSP430X有什麼區別?
我增加了更多的信息 – Cristian 2010-05-14 17:22:58