Android WebView 开发详解(二)
生活随笔
收集整理的這篇文章主要介紹了
Android WebView 开发详解(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請注明出處 ?http://blog.csdn.net/typename/article/details/39495409?powered by miechal zhao? ?
概覽:
? ?Android WebView 做為承載網頁的載體控件,他在網頁顯示的過程中會產生一些事件,并回調給我們的應用程序,以便我們在網頁加載過程中做應用程序想處理的事情。比如說客戶端需要顯示網頁加載的進度、網頁加載發生錯誤等等事件。 WebView提供兩個事件回調類給應用層,分別為WebViewClient,WebChromeClient開發者可以繼承這兩個類,接手相應事件處理。WebViewClient 主要提供網頁加載各個階段的通知,比如網頁開始加載onPageStarted,網頁結束加載onPageFinished等;WebChromeClient主要提供網頁加載過程中提供的數據內容,比如返回網頁的title,favicon等。
1.WebViewClient的基本使用
創建WebViewClient實例并設置到WebView對象中,具體代碼參考如下: [java]?view plaincopy2.WebViewClient API詳解
1)網頁加載時機部分 [java]?view plaincopy參數說明: @param view 接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param url ? ?即將要被加載的url @return ?true 當前應用程序要自己處理這個url, 返回false則不處理。
Tips (1) 當請求的方式是"POST"方式時這個回調是不會通知的。 (2) 當我們訪問的地址需要我們應用程序自己處理的時候,可以在這里截獲,比如我們發現跳轉到的是一個market的鏈接,那么我們可以直接跳轉到應用市場,或者其他app。
[java]?view plaincopy
參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param url ? ?即將要被加載的url @param favicon 如果這個favicon已經存儲在本地數據庫中,則會返回這個網頁的favicon,否則返回為null。
Tips: (1) iframe 可能不少人不知道什么含義,這里我解釋下,iframe 我們加載的一張,下面有很多鏈接,我們隨便點擊一個鏈接是即當前host的一個iframe. (2) 有個問題可能是開發者困惑的,onPageStarted和shouldOverrideUrlLoading 在網頁加載過程中這兩個函數到底哪個先被調用。 ? ? ?當我們通過loadUrl的方式重新加載一個網址時候,這時候會先調用onPageStarted再調用shouldOverrideUrlLoading,當我們在打開的這個網址點擊一個link,這時候會先調用shouldOverrideUrlLoading 再調用onPageStarted。不過shouldOverrideUrlLoading不一定每次都被調用,只有需要的時候才會被調用。
[java]?view plaincopy
當內核加載完當前頁面時會通知我們的應用程序,這個函數只有在main frame情況下才會被調用,當調用這個函數之后,渲染的圖片不會被更新,如果需要獲得新圖片的通知可以使用@link WebView.PictureListener#onNewPicture。
參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param url ? ?即將要被加載的url
[java]?view plaincopy
參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param url ? ?即將加載的url 資源
[java]?view plaincopy
參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param url ? ?raw url 制定的資源 @return 返回WebResourceResponse包含數據對象,或者返回null
Tips 這個回調并不一定在UI線程執行,所以我們需要注意在這里操作View或者私有數據相關的動作。 如果我們需要改變網頁的背景,或者需要實現網頁頁面顏色定制化的需求,可以在這個回調時機處理。
[java]?view plaincopy
參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param errorCode 錯誤號可以在WebViewClient.ERROR_* 里面找到對應的錯誤名稱。 @param description 描述錯誤的信息 @param failingUrl ?當前訪問失敗的url,注意并不一定是我們主url
Tips 在onReceiveError我們可以自定義網頁的錯誤頁面。
[java]?view plaincopy
[java]?view plaincopy
通知應用程序可以將當前的url存儲在數據庫中,意味著當前的訪問url已經生效并被記錄在內核當中。這個函數在網頁加載過程中只會被調用一次。注意網頁前進后退并不會回調這個函數。
參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param url 當前正在訪問的url? @ param isReload 如果是true 這個是正在被reload的url
[java]?view plaincopy
當網頁加載資源過程中發現SSL錯誤會調用此方法。我們應用程序必須做出響應,是取消請求handler.cancel(),還是繼續請求handler.proceed();內核的默認行為是handler.cancel();
參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param handler 處理用戶請求的對象。 @param error ?SSL錯誤對象
Tips 內核會記住本次選擇,如果下次還有相同的錯誤,內核會直接執行之前選擇的結果。
[java]?view plaincopy
通知應用程序WebView接收到了一個Http auth的請求,應用程序可以使用supplied 設置webview的響應請求。默認行為是cancel 本次請求。 參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param handler 用來響應WebView請求的對象 @param host ?請求認證的host @param realm 認真請求所在的域
[java]?view plaincopy
[java]?view plaincopy
[java]?view plaincopy
通知應用程序有個自動登錄的帳號過程 參數說明: @param view 請求登陸的webview @param realm 賬戶的域名,用來查找賬戶。 @param account 一個可選的賬戶,如果是null 需要和本地的賬戶進行check, 如果是一個可用的賬戶,則提供登錄。 @param ?args ?驗證制定參數的登錄用戶
3.WebChromeClient 基本使用
4. WebChromeClient API詳解
創建WebChromeClient實例并設置到WebView對象中,具體代碼參考如下:[java]?view plaincopy
[java]?view plaincopy
當document 的title變化時,會通知應用程序 參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param title ?document新的title Tips 這個函數調用時機不確定,有可能很早,有可能很晚,取決于網頁把title設置在什么位置,大多數網頁一般把title設置到頁面的前面,因此很多情況會比較早回調到這個函數。
[java]?view plaincopy
當前頁面有個新的favicon時候,會回調這個函數。
參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param icon 當前頁面的favicon
[java]?view plaincopy
通知應用程序 apple-touch-icon的 url?
參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。 @param url ?apple-touch-icon 的服務端地址 @param precomposed ?如果precomposed 是true 則touch-icon是預先創建的 Tips? 如果應用程序需要這個icon的話, 可以通過這個url獲取得到 icon。
[java]?view plaincopy
通知應用程序webview需要顯示一個custom view,主要是用在視頻全屏HTML5Video support。 參數說明: @param view 即將要顯示的view @param callback ?當view 需要dismiss 則使用這個對象進行回調通知。
[java]?view plaincopy
[java]?view plaincopy
[java]?view plaincopy
[java]?view plaincopy
通知應用程序從關閉傳遞過來的webview并從view tree中remove。
[java]?view plaincopy
通知應用程序顯示javascript alert對話框,如果應用程序返回true內核認為應用程序處理這個消息,返回false,內核自己處理。 參數說明: @param view?接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。
@param url 當前請求彈出javascript 對話框webview 加載的url地址。 @param message 彈出的內容信息 @result 用來響應用戶的處理。
Tips 如果我們應用接管處理, 則必須給出result的結果,result.cancel,result.comfirm必須調用其中之后,否則內核會hang住。
[java]?view plaincopy
通知應用程序提供confirm 對話框。 參數說明同上onJsAlert
[java]?view plaincopy
通知應用程序顯示一個prompt對話框。? Tips 必須調用result.confirm 方法如果應用程序接管這個方法。
[java]?view plaincopy
[java]?view plaincopy
通知應用程序webview內核web sql 數據庫超出配額,請求是否擴大數據庫磁盤配額。默認行為是不會增加數據庫配額。 參數說明:
@param url 觸發這個數據庫配額的url地址 @param?databaseIdentifier? 指示出現數據庫超過配額的標識。 @param?quota ? 原始數據庫配額的大小,是字節單位bytes @param?estimatedDatabaseSize ?到達底線的數據大小 bytes @param?totalQuota 總的數據庫配額大小 bytes @param?quotaUpdater 更新數據庫配額的對象,可以使用?quotaUpdater.updateQuota(newQuota);配置新的數據庫配額大小。
[java]?view plaincopy
?通知應用程序內核已經到達最大的appcache。 appcache是HTML5針對offline的一個數據處理標準。
[java]?view plaincopy
當前頁面請求是否允許進行定位。
GeolocationPermissions.Callback的使用
public void invoke(String origin, boolean allow, boolean retain);
參數說明: @param origin 權限設置的源地址 @param allow 是否允許定位 @retain 當前的選擇是否讓內核記住。
[java]?view plaincopy
[java]?view plaincopy
總結
以上是生活随笔為你收集整理的Android WebView 开发详解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android WebView 开发详解
- 下一篇: android sina oauth2.