之前對于webview的使用做了總結,以為坑應該都吃掉了,沒想到今天發版后才發現有一個大坑:
在Android7.0+,第一個加載webview顯示是完全沒有問題的,但當點擊webview內容進行二級頁面跳轉后,就會顯示一片空白,查詢了url是正常可以打開的,這就坑了!!
遇到問題,解決問題!!!
首先,憑過去前端開發經驗,出現空白頁面就是url為about:blank,于是就在onPageFinished()的回調里對url打個log,果然輸出是about:blank。
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.i("TAG",url);
}
接下去就是定位shouldOverrideUrlLoading()這個回調方法,應該是loadUrl的時候出了問題。
//在webview內加載url
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.toString());
Log.i(TAG, request.toString());
return true;
}
打開Log一看,果然load的是一個對象,而不是一個url。然后跟蹤到request中持有getUrl()方法,所以直接調用就出錯了,經查詢只有在5.0系統才能用,所以只要做個兼容判斷就可以了。
最終處理方案為:
//在webview內加載url
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view.loadUrl(request.getUrl().toString());
} else {
view.loadUrl(request.toString());
}
return true;
}