最近项目需要使用webview加载证书失效的https网页,就想起来WebViewClient的onReceivedSslError方法,然后调用其中SslErrorHandler对象的proceed方法,去忽略证书的错误,我的代码如下:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
handler.proceed();
}
但是页面加载白屏,找了许久问题,最终发现问题在
super.onReceivedSslError(view, handler, error)
上,这句代码一定要删除掉。
那么原因是什么呢?咱们查看WebViewClient的源码会发现这样一行代码:
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.cancel();
}
也就是说,如果你保留了super.onReceivedSslError这行代码,他就会先把本次网页加载取消,所以就白屏了。
很多开发中的问题都隐藏在很小的地方,大家检查问题一定要细心哦!