這篇文章主要介紹Android7.0系統(tǒng)中webview顯示https頁面空白怎么辦,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、淇濱網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、電子商務(wù)商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為淇濱等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
最近開發(fā)的時候,偶爾遇到在線上穩(wěn)定運行的webview內(nèi)嵌的h6頁面加載不出來,一直定位不到具體原因(因為我們自己做的兼容性測試上不重現(xiàn)),看系統(tǒng)日志也沒有發(fā)現(xiàn)什么問題,后來咨詢了用戶手機的型號,發(fā)現(xiàn)是7.0或者6.0以上的個別機型會出現(xiàn)。
后來借到了一臺業(yè)務(wù)的手機,型號是:三星 S6 EDGE,SM-G9205,在大多數(shù)機型上運行正常的頁面,在這個機器上如下圖:
這個頁面在近期的變更是從http切換到https,由于之前的頁面是http,我們在切換的時候,除了url之外,并未對webview的ssl校驗做特殊的處理。
問題就出在這里,webview在加載https的時候,通常會用手機根證書對h6的頁面進行校驗,這個校驗不一定成功。
失敗的時候會回調(diào)webviewclient的onReceivedSslError函數(shù)。
既然如此,我們可以在證書校驗失敗的情況下,將其跳過,繼續(xù)加載就可以了,如下:
public void onReceivedSslError(WebView view, android.webkit.SslErrorHandler handler, android.net.http.SslError error) { handler.proceed();//這里校驗失敗的時候放過 };
重新運行后發(fā)現(xiàn),這個方法是可行的,他在ssl校驗失敗的時候繞過了這個步驟。
但是問題又來了,我們切換https,本來就是希望利用ssl這一層,保證加載頁面的安全性,現(xiàn)在統(tǒng)一跳過,不是達不到安全的初衷了嗎。
繼續(xù)調(diào)試,我們將 onReceivedSslError這里面的SslError信息打出來,發(fā)現(xiàn)是下面的錯誤:
SslError.SSL_INVALID//校驗過程遇到了bug
這個錯誤是webviewclient在校驗ssl的過程中,出現(xiàn)了bug。
查閱源碼后發(fā)現(xiàn),全量的錯誤一共有如下幾類:
其中有的是證書本身有問題,有的是校驗出了bug,因此全部放過雖然是最便捷的,但可能不是最好的。
最后我判斷,在ssl校驗失敗的情況下,如果是校驗過程遇到了bug,那就放過,其他情況就cancel:
if(error.getPrimaryError() == android.net.http.SslError.SSL_INVALID ){// 校驗過程遇到了bug handler.proceed(); }else{ handler.cancel(); }
以上是“Android7.0系統(tǒng)中webview顯示https頁面空白怎么辦”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!