1. 程式人生 > >華為nexus 6p,聯想900等 android手機載入webview 顯示空白解決方案

華為nexus 6p,聯想900等 android手機載入webview 顯示空白解決方案

Android]用WebView訪問證書有問題的SSL網頁

android #webview

Aug 29, 2013

在WebView里加載SSL網頁很正常,也沒什麼難度。但如果要載入的SSL頁面的證書有問題,比如過期、資訊不正確、發行機關不被信任等,WebView就會拒絕載入該網頁。PC上的瀏覽器會彈出證書錯誤的對話方塊,提示你是否要無視錯誤繼續瀏覽。實際上在WebView裡也可以這樣做,以實現載入證書有問題的頁面。

WebView webview = (WebView) findViewById(R.id.webview);
webview.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {

    // *** NEVER DO THIS!!! ***
    // super.onReceivedSslError(view, handler, error);

    // let's ignore ssl error
    handler.proceed();
}

}
只需像這樣過載WebViewClient的onReceivedSslError()函式並在其中執行handler.proceed(),即可忽略SSL證書錯誤,繼續載入頁面。

這裡要注意的是,千萬不要呼叫super.onReceivedSslError()。這是因為WebViewClient的onReceivedSslError()函式中包含了一條handler.cancel()(見原始碼,其含義是停止載入,所以如果呼叫了super.onReceivedSslError(),其結果就是第一次訪問時無法載入,第二次以後可以載入(不知道為什麼),而且還可能發生libc的段錯誤:

A/libc: Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1)