WebView設(shè)置WebViewClient的方法
WebView設(shè)置WebViewClient的方法
shouldOverrideUrlLoading:
在web頁(yè)面里單擊鏈接的時(shí)候,會(huì)自動(dòng)調(diào)用android自帶的瀏覽器來(lái)打開(kāi)鏈接,需要通過(guò)該方法在本頁(yè)面打開(kāi);
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }
onLoadResource:加載資源時(shí)響應(yīng) onPageStart:在加載頁(yè)面時(shí)響應(yīng) onPageFinish:在加載頁(yè)面結(jié)束時(shí)響應(yīng) onReceiveError:在加載出錯(cuò)時(shí)響應(yīng) onReceivedHttpAuthRequest:
公共方法
doUpdateVisitedHistory(WebView view,String url,boolean isReload)
通知主機(jī)應(yīng)用程序更新其訪問(wèn)數(shù)據(jù)庫(kù)的鏈接。(貌似可以理解成WebView內(nèi)容變化后,數(shù)據(jù)庫(kù)儲(chǔ)存的歷史記錄也變化了,需要更新)
onFormResubmission(WebView view,Message dontResend,Message resend)
在應(yīng)用程序中,如果瀏覽器需要重新加載頁(yè)面數(shù)據(jù),這個(gè)頁(yè)面必須是屬于POST請(qǐng)求,默認(rèn)情況下,是不會(huì)發(fā)送重新加載數(shù)據(jù).
onLoadResource(WebView view,String url)
當(dāng)WebView加載特定的資源時(shí),會(huì)通知WebView所請(qǐng)求的Url.
onPageCommitVisible(WebView view,String url)
(1)通知應(yīng)用程序,WebView之前頁(yè)面遺留的內(nèi)容,將不會(huì)在加載和繪制.
(2)這個(gè)回調(diào)被使用在WebView內(nèi)容安全的回收,確保不會(huì)顯示陳舊的內(nèi)容.
(3)它能夠在最早被調(diào)用,以此來(lái)保證onDraw(Canvas)在以前的界面不會(huì)繪制任何內(nèi)容,接下來(lái)需要繪制的內(nèi)容background color或者需要加載的新內(nèi)容.
(4)這個(gè)方法會(huì)在Http的Body已經(jīng)加載,已經(jīng)反映在DOM上,并且將會(huì)在其可見(jiàn)的時(shí)候繪制.這個(gè)回調(diào)發(fā)生在文檔(document)加載的早期,因此它的資源(css,和圖像)可能是拿不到的.
(5)如果需要更細(xì)粒度的視圖更新,具體到元素,<標(biāo)簽/>,需要了解postVisualStateCallback(long, WebView.VisualStateCallback).
(6)請(qǐng)注意這上邊的所有條件也支持postVisualStateCallback(long ,WebView.VisualStateCallback)
void onPageFinished(webView view,String url)
通知應(yīng)用程序頁(yè)面已經(jīng)完成加載,只有主框架才能調(diào)用此方法,當(dāng)onPageFinish()被調(diào)用時(shí),呈現(xiàn)圖片可能還沒(méi)有被更新.新照片的通知更新,請(qǐng)使用onNewPicture(WebView,Picture)
onPageStarted(WebView view,String url,Bitmap favicon)
通知應(yīng)用程序已經(jīng)開(kāi)始進(jìn)行頁(yè)面加載,這個(gè)方法,在每個(gè)主框架加載一個(gè)頁(yè)面或者一個(gè)內(nèi)置頁(yè)框都會(huì)被調(diào)用.這也意味著onPageStarted將不會(huì)發(fā)生在嵌入式的框架內(nèi)的內(nèi)容變化,就像單擊鏈接目標(biāo).
onReceivedClientCertRequest(WebView view,ClientCertRe)
通知應(yīng)用程序來(lái)處理一個(gè)SSL客戶(hù)證書(shū)請(qǐng)求,應(yīng)用程序負(fù)責(zé)提示用戶(hù)輸入鑰匙.
有三種處理方式:
進(jìn)行proceed()
取消cancel()
無(wú)視ignore()
WebView將會(huì)儲(chǔ)存在響應(yīng)內(nèi)存(特指App還存活)的進(jìn)行(proceed)和取消(cancel)的操作,并且onReceivedClientCertRequest()在遇到相似的host和port,不會(huì)對(duì)用戶(hù)進(jìn)行通知,但是無(wú)視(ignore)狀態(tài)在WebView中不會(huì)儲(chǔ)存,下次還會(huì)繼續(xù)提示.
注意:
(1)谷歌的Chromium(引擎)可能會(huì)緩存這些響應(yīng),所以當(dāng)前情況下,忽略可能是影響最小的一個(gè)選擇.
(2)如果在UI線程使用,這個(gè)連接可能被暫停.
(3)在大多數(shù)情況,這個(gè)應(yīng)用程序項(xiàng)目,應(yīng)該實(shí)現(xiàn)KeyChainAliasCallback這個(gè)接口,并且將這個(gè)接口傳遞給choosePrivateKeyAlias(Activity,KeyChainAliasCallback,String[],Principal[],Uri,String)并且給User(用戶(hù))選擇一個(gè)別名來(lái)開(kāi)始這個(gè)活動(dòng).
(4)這個(gè)活動(dòng)的鑰匙串將通過(guò)接口回調(diào)的方式實(shí)現(xiàn).
(5)下一個(gè)App應(yīng)該通過(guò)創(chuàng)建一個(gè)異步任務(wù)通過(guò)getPrivateKey(Context,String)方法來(lái)獲得這個(gè)(Key)鑰匙.
(6)這個(gè)方法在AOSP瀏覽器的默認(rèn)行為是取消(cancel),并且不返回客戶(hù)端證書(shū).
在API 23被遺棄.
onReceivedError ( WebView view, int errorCode, String descrption, String failingUrl )
向應(yīng)用程序報(bào)告錯(cuò)誤,這個(gè)錯(cuò)誤都是不可恢復(fù)的(這些資源不可以被使用).errorCode參數(shù)對(duì)應(yīng)一個(gè)ERROR_*常量.
onReceiver(Webview view, WebResourceRequest request, WebResourceError error)
向應(yīng)用程序報(bào)告Web資源加載錯(cuò)誤.這些錯(cuò)誤通常會(huì)顯示無(wú)法連接到服務(wù)器,回調(diào)時(shí)注意與棄用版本,新版本將針對(duì)任何資源(iframe,picture),不僅針對(duì)主頁(yè)面,因此,建議在這個(gè)回調(diào)上執(zhí)行加載資源錯(cuò)誤的 通用的處理情況.
onReceivedHttpAuthRequest(Webview view. HttpAuthHandler handler, String host, String realm)
通知應(yīng)用程序接收WebView上面的HTTP身份驗(yàn)證請(qǐng)求.應(yīng)用程序可以使用提供的HttpAuthHandler來(lái)設(shè)置對(duì)WebView上面請(qǐng)求的回應(yīng).默認(rèn)的行為是取消請(qǐng)求.
onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse)
通知App在從服務(wù)器端接收到HTTP錯(cuò)誤,并且==HTTP的錯(cuò)誤狀態(tài)碼>=400==,這個(gè)回調(diào)將對(duì)任何資源(iframe,picture等)不僅對(duì)主頁(yè)面.因?yàn)?建議在這個(gè)回調(diào)上面執(zhí)行最普遍的處理,處理通用事件.
==注意:服務(wù)器響應(yīng)的內(nèi)容可能在errorResponse中找不到.==
onReceivedLoginRequest(Webview view, String realm String account String args)
通知應(yīng)用程序自動(dòng)用戶(hù)登錄已經(jīng)被處理.
onReceiverSslError(WebView view, SslErrorHandler handler SslError error)
通知應(yīng)用程序加載資源時(shí)發(fā)生SSL錯(cuò)誤,主機(jī)應(yīng)用程序必須調(diào)用handler.cancel()或者h(yuǎn)andler.proceed().注意,這個(gè)決定可能被保留應(yīng)對(duì)未來(lái)的SSL錯(cuò)誤,默認(rèn)的行為是取消(cancel)加載.
onScaleChange(WebView view, float oldScale, float newScale)
通知APP對(duì)于WebView的比例大小已經(jīng)發(fā)生變化.
onUnhandledKeyEvent(WebView view,KeyEvent event)
通知應(yīng)用這個(gè)事件沒(méi)有在WebView聲明,除了系統(tǒng)事件,WebView總是消費(fèi)普通的事件,或者設(shè)置shouldOverrideKeyEvent方法返回值為true.
這個(gè)事件的發(fā)出,屬于異步的發(fā)出,它給應(yīng)用程序機(jī)會(huì)來(lái)處理這些不能處理的關(guān)鍵性事件.
WebResourceResponse shouldInterceptRequest( WebView view, WebResourceRequest request)
通知應(yīng)用程序一個(gè)資源請(qǐng)求,并且允許應(yīng)用程序返回?cái)?shù)據(jù).如果返回值為null,這個(gè)WebView將會(huì)繼續(xù)加載普通的資源請(qǐng)求.否則,返回響應(yīng)的數(shù)據(jù)將會(huì)被使用.
注意:這個(gè)方法將在非主線程調(diào)用.所以客戶(hù)端在訪問(wèn)私有數(shù)據(jù)或者UI視圖時(shí)需要謹(jǐn)慎行事.
boolean shouldOverrideKeyEvent(WebView view ,KeyEvent event)
賦予應(yīng)用程序能夠處理異步事件的機(jī)會(huì).
eg:菜單的快捷鍵需要先被過(guò)濾.
如果方法返回true,WebView將不會(huì)處理該事件,如果返回false,那么WebView將會(huì)一直處理該事件,所以沒(méi)有超級(jí)鏈接也能看到該事件.
這個(gè)默認(rèn)行為是返回false.
shouldOverrideUrlLoading(WebView view WebResourceRequest request)
使主機(jī)應(yīng)用程序能夠控制,當(dāng)一個(gè)新的Url加載到當(dāng)前的WebView.
如果沒(méi)有提供WebViewClient,默認(rèn)情況下WebView會(huì)詢(xún)問(wèn)Activity Manager 去選擇來(lái)適當(dāng)?shù)奶幚懋?dāng)前的Url,如果WebViewClient被提供,返回true,意味著主機(jī)程序來(lái)處理url,而返回false意味著當(dāng)前WebView處理url.
如有疑問(wèn)請(qǐng)留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
詳解 android 光線傳感器 light sensor的使用
這篇文章主要介紹了詳解 android 光線傳感器 light sensor的使用的相關(guān)資料,需要的朋友可以參考下2017-06-06Android自定義view實(shí)現(xiàn)車(chē)載可調(diào)整軌跡線
這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)車(chē)載可調(diào)整軌跡線,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Android開(kāi)發(fā)實(shí)現(xiàn)的標(biāo)準(zhǔn)體重計(jì)算器功能示例
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)的標(biāo)準(zhǔn)體重計(jì)算器功能,結(jié)合實(shí)例形式分析了Android體重計(jì)算器的界面布局與功能實(shí)現(xiàn)相關(guān)操作技巧,需要的朋友可以參考下2017-12-12Android中3種全屏方法及3種去掉標(biāo)題欄的方法
這篇文章主要介紹了Android中3種全屏方法及3種去掉標(biāo)題欄的方法,二個(gè)問(wèn)題各給出了3種解決方法,并給出實(shí)例代碼,需要的朋友可以參考下2015-06-06Android編程之文件讀寫(xiě)操作與技巧總結(jié)【經(jīng)典收藏】
這篇文章主要介紹了Android編程之文件讀寫(xiě)操作與技巧,結(jié)合實(shí)例形式總結(jié)分析了Android常見(jiàn)的文件與目錄的讀寫(xiě)操作,及相關(guān)函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06Android自定義ViewGroup實(shí)現(xiàn)朋友圈九宮格控件
在我們的實(shí)際應(yīng)用中,經(jīng)常需要用到自定義控件,比如自定義圓形頭像,自定義計(jì)步器等等,這篇文章主要給大家介紹了關(guān)于Android自定義ViewGroup實(shí)現(xiàn)朋友圈九宮格控件的相關(guān)資料,需要的朋友可以參考下2021-07-07Android實(shí)現(xiàn)下拉菜單Spinner效果
這篇文章主要介紹了Android實(shí)現(xiàn)下拉菜單Spinner效果,學(xué)習(xí)Spinner組件的使用方法,非常好用的一款組件,相當(dāng)于從下拉列表中選擇項(xiàng)目,感興趣的小伙伴們可以參考一下2016-04-04