1. 程式人生 > >Android webview載入H5空白頁問題

Android webview載入H5空白頁問題

   我們在編寫程式碼,經常會不可避免的載入一些H5頁面,但是有時候會出現一些載入錯誤,如空白頁的問題,今天我們就探討一下加載出現空白頁的問題:

首先我先說一下我在專案中遇到的問題:這就姑且當做造成空白頁的原因一:

  在Android中,WebView可以用來載入http和https網頁到本地應用的控制元件。但是在預設情況下,通過loadUrl(String url)方法,可以順利loadUrl(“http://www.baidu.com”)之類的頁面。但是,當load通過ssl加密的https頁面,但是如果這個網站的安全證書在Android無法得到認證,WebView就會變成一個空白頁,而並不會像自帶的瀏覽器一樣彈出提示。因此,我們必須針對這種情況進行處理。

我們看一下出現問題的頁面:


大家看到“選部門”,“選同事”是兩個fragment頁面用來展示載入的H5,但是展示的是空白頁,這裡是由於WebView訪問https SSL證書網頁錯誤造成的,也就是上面所說的原因一,那我們來看下解決方法:

webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
 
        // 不要使用super,否則有些手機訪問不了,因為包含了一條 handler.cancel()
        // super.onReceivedSslError(view, handler, error);
 
        // 接受所有網站的證書,忽略SSL錯誤,執行訪問網頁
        handler.proceed();
    }
}

然後問題就解決了,看下效果圖:



之後查了些資料,也有不少原因會引起空白頁,這裡姑且就當做:造成空白頁的原意二

專案中要用到Fragment 切換,然後webview載入本地的H5,所以遇到activity 跳轉後返回有webview的activity會出現空白,明明執行了oncreate view,卻不顯示H5介面

經過一番。。。得到一下解決辦法

1:首先為了H5網頁能夠正常載入,就不能採用硬體加速,但是為了體驗又必須要使用硬體加速消除卡頓感

所以想到了載入的時候用軟體渲染,

<com.madun.yeehaw.biz.module.createModel.ui.WebView
        Android:id="@+id/web_view"
        android:layerType="software"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
#或者
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

這樣確保了網頁能夠在切換過程也能被正常載入

2:通過載入完成後啟動硬體渲染加速

mWebView.setLayerType(View.LAYER_TYPE_HARDWARE,null);
這句程式碼放在什麼地方呢?
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mWebView.setLayerType(View.LAYER_TYPE_HARDWARE,null);
}
}
放在webviewclient的OnpageFinished()函式中執行

3:在onPause()中加上這句

mWebView.loadUrl("about:blank");
這樣就能完美的解決白屏問題了