問題描述:
創(chuàng)新互聯(lián)是一家專業(yè)提供東寶企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、網(wǎng)站制作、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為東寶眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
問題原因
試了很多方法,最后發(fā)現(xiàn)是Https的證書有問題,由于網(wǎng)頁鏈接是客戶提供的,不知道證書是如何生成的,導(dǎo)致不被Android系統(tǒng)信任
問題的發(fā)現(xiàn)之旅
網(wǎng)頁鏈接在手機(jī)和電腦都能打開,所以想著網(wǎng)頁鏈接本身應(yīng)該沒有問題。
debug網(wǎng)頁加載的過程也沒有發(fā)現(xiàn)問題
但是后來用UC瀏覽器打開以后發(fā)現(xiàn)加載的過程中會彈出提示:
出錯(cuò)的提示
根據(jù)彈出的提示知道很可能是證書的問題,于是重新開始debug項(xiàng)目中的WebView
一般我們在初始化一個(gè) WebView
時(shí)都有幾個(gè)固定的步驟,其中最重要的一步就是設(shè)置 WebViewClient
enWebview.setWebChromeClient(new WebChromeClient()); enWebview.setWebViewClient(new WebViewClient());
如果WebView加載因?yàn)樽C書的問題失敗,就會回調(diào) WebViewClient
的一個(gè)接口:
@Override public void onReceivedSslError(final WebView view, final SslErrorHandler handler, SslError error) { }
而 WebViewClient
默認(rèn)會終止加載
public class WebViewClient { public void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error) { //終止加載 handler.cancel(); } ... }
這個(gè) handler
是一個(gè) SslErrorHandler
接口
public class SslErrorHandler extends Handler { /** * @hide Only for use by WebViewProvider implementations. */ @SystemApi public SslErrorHandler() {} /** * Proceed with the SSL certificate. */ public void proceed() {} /** * Cancel this request and all pending requests for the WebView that had * the error. */ public void cancel() {} }
通過上面的注釋我們可以知道,調(diào)用 proceed
就是繼續(xù)利用當(dāng)前證書加載,而 cancel
就是終止本次的所有請求。而上面 WebViewClient
顯然默認(rèn)是終止所有請求了。
通過debug發(fā)現(xiàn), WebViewClient
在調(diào)用了上面的 SslErrorHandler
的 cancel
方法以后,就馬上會回調(diào) onPageFinished
方法,不會回調(diào) onReceivedError
,所以也就不會展示自定義的加載錯(cuò)誤頁面,結(jié)果就是一片空白了。
原因找到了,那怎么解決呢?
其實(shí)答案也已經(jīng)在上面給出了。我們直接覆寫 WebViewClient
的 onReceivedSslError
方法,然后根據(jù)需要做些處理。比如彈出提示框告訴用戶當(dāng)前證書有問題,是否繼續(xù)加載等。
public class MyWebViewClient { public void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error) { //彈出提示框,讓用戶決定是否繼續(xù)加載 //1.用戶選擇繼續(xù)加載 // handler.proceed(); //2.用戶取消 //handler.cancel() } ... }
總結(jié)
這個(gè)問題困擾了很久,剛剛開始想到可能是WebView兼容問題,因?yàn)橛∠罄颳ebView有很多坑。但是同一個(gè)客戶提供的另一個(gè)Https的鏈接是正常的,而且之前沒有出現(xiàn)過這種情況,于是debug進(jìn)去發(fā)現(xiàn)網(wǎng)頁鏈接正常傳入了就沒多想,就認(rèn)為是沒問題了。還是"too young, too simple"?。?/p>
而且對 WebViewClient
的 onReceivedSslError
也不熟悉,沒有想到這一層?,F(xiàn)如今基本上所有的網(wǎng)頁鏈接都是 Https
的了,我們以后在開發(fā)過程中還是要注意這個(gè)問題,在 onReceivedSslError
中提前做好處理。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
分享文章:AndroidWebView打開網(wǎng)頁一片空白的解決方法
本文路徑:http://jinyejixie.com/article46/gpeohg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、商城網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、云服務(wù)器、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)