Android 7.0系統(tǒng)webview 顯示https頁面空白處理方法
最近開發(fā)的時(shí)候,偶爾遇到在線上穩(wěn)定運(yùn)行的webview內(nèi)嵌的h5頁面加載不出來,一直定位不到具體原因(因?yàn)槲覀冏约鹤龅募嫒菪詼y(cè)試上不重現(xiàn)),看系統(tǒng)日志也沒有發(fā)現(xiàn)什么問題,后來咨詢了用戶手機(jī)的型號(hào),發(fā)現(xiàn)是7.0或者6.0以上的個(gè)別機(jī)型會(huì)出現(xiàn)。
后來借到了一臺(tái)業(yè)務(wù)的手機(jī),型號(hào)是:三星 S6 EDGE,SM-G9205,在大多數(shù)機(jī)型上運(yùn)行正常的頁面,在這個(gè)機(jī)器上如下圖:
這個(gè)頁面在近期的變更是從http切換到https,由于之前的頁面是http,我們?cè)谇袚Q的時(shí)候,除了url之外,并未對(duì)webview的ssl校驗(yàn)做特殊的處理。
問題就出在這里,webview在加載https的時(shí)候,通常會(huì)用手機(jī)根證書對(duì)h5的頁面進(jìn)行校驗(yàn),這個(gè)校驗(yàn)不一定成功。
失敗的時(shí)候會(huì)回調(diào)webviewclient的onReceivedSslError函數(shù)。
既然如此,我們可以在證書校驗(yàn)失敗的情況下,將其跳過,繼續(xù)加載就可以了,如下:
public void onReceivedSslError(WebView view, android.webkit.SslErrorHandler handler, android.net.http.SslError error) { handler.proceed();//這里校驗(yàn)失敗的時(shí)候放過 };
重新運(yùn)行后發(fā)現(xiàn),這個(gè)方法是可行的,他在ssl校驗(yàn)失敗的時(shí)候繞過了這個(gè)步驟。
但是問題又來了,我們切換https,本來就是希望利用ssl這一層,保證加載頁面的安全性,現(xiàn)在統(tǒng)一跳過,不是達(dá)不到安全的初衷了嗎。
繼續(xù)調(diào)試,我們將 onReceivedSslError這里面的SslError信息打出來,發(fā)現(xiàn)是下面的錯(cuò)誤:
SslError.SSL_INVALID//校驗(yàn)過程遇到了bug
這個(gè)錯(cuò)誤是webviewclient在校驗(yàn)ssl的過程中,出現(xiàn)了bug。
查閱源碼后發(fā)現(xiàn),全量的錯(cuò)誤一共有如下幾類:
其中有的是證書本身有問題,有的是校驗(yàn)出了bug,因此全部放過雖然是最便捷的,但可能不是最好的。
最后我判斷,在ssl校驗(yàn)失敗的情況下,如果是校驗(yàn)過程遇到了bug,那就放過,其他情況就cancel:
if(error.getPrimaryError() == android.net.http.SslError.SSL_INVALID ){// 校驗(yàn)過程遇到了bug handler.proceed(); }else{ handler.cancel(); }
以上這篇Android 7.0系統(tǒng)webview 顯示https頁面空白處理方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
360瀏覽器文本框獲得焦點(diǎn)后被android軟鍵盤遮罩該怎么辦
最近接了個(gè)項(xiàng)目,項(xiàng)目需求是這樣的,站點(diǎn)上篩選按鈕點(diǎn)擊后彈出層(fixed),當(dāng)輸入框獲取焦點(diǎn)以后彈出系統(tǒng)自帶的軟鍵盤,在android上十款瀏覽器挨個(gè)測(cè)試比對(duì),發(fā)現(xiàn)在360瀏覽器彈出鍵盤以后獲取焦點(diǎn)的文本框被軟鍵盤覆蓋了,下面分享我的解決辦法2015-12-12Android Studio和阿里云數(shù)據(jù)庫實(shí)現(xiàn)一個(gè)遠(yuǎn)程聊天程序
本文主要介紹了Android Studio和阿里云數(shù)據(jù)庫實(shí)現(xiàn)一個(gè)遠(yuǎn)程聊天程序,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11解析activity之間數(shù)據(jù)傳遞方法的詳解
本篇文章是對(duì)activity之間數(shù)據(jù)傳遞的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Android編程實(shí)現(xiàn)系統(tǒng)重啟與關(guān)機(jī)的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)系統(tǒng)重啟與關(guān)機(jī)的方法,較為詳細(xì)的分析了Android運(yùn)行原理與源碼剖析,講述了Android編程實(shí)現(xiàn)系統(tǒng)重啟與關(guān)機(jī)的相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下2016-02-02Android編程實(shí)現(xiàn)監(jiān)控apk安裝,卸載,替換的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)監(jiān)控apk安裝,卸載,替換的方法,涉及Android基于Intent監(jiān)控apk狀態(tài)的功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-01-01Android中實(shí)現(xiàn)EditText密碼顯示隱藏的方法
這篇文章主要介紹了Android中實(shí)現(xiàn)EditText密碼顯示隱藏的方法,需要的朋友可以參考下2017-01-01Android Studio實(shí)現(xiàn)QQ的注冊(cè)登錄和好友列表跳轉(zhuǎn)
最近做了一個(gè)項(xiàng)目,這篇文章主要介紹了Android Studio界面跳轉(zhuǎn),本次項(xiàng)目主要包含了注冊(cè)、登錄和好友列表三個(gè)界面以及之間相互跳轉(zhuǎn),感興趣的可以了解一下2021-05-05Android入門之動(dòng)態(tài)BroadCast的使用教程
系統(tǒng)自己在很多時(shí)候都會(huì)發(fā)送廣播,比如電量低或者充足,剛啟動(dòng)完,插入耳機(jī),你有一條新的微信消息,這種都是使用BroadCast機(jī)制去實(shí)現(xiàn)的。BroadCast分為靜態(tài)和動(dòng)態(tài)BroadCast兩種,本文就來聊聊動(dòng)態(tài)BroadCast的使用,需要的可以參考一下2022-12-12Android中TabLayout結(jié)合ViewPager實(shí)現(xiàn)頁面切換
這篇文章主要為大家詳細(xì)介紹了Android中TabLayout結(jié)合ViewPager實(shí)現(xiàn)頁面切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12