Android 7.0系统webview 显示https页面空白处理方法
作者:danyan_li 发布时间:2021-10-22 09:36:49
最近开发的时候,偶尔遇到在线上稳定运行的webview内嵌的h5页面加载不出来,一直定位不到具体原因(因为我们自己做的兼容性测试上不重现),看系统日志也没有发现什么问题,后来咨询了用户手机的型号,发现是7.0或者6.0以上的个别机型会出现。
后来借到了一台业务的手机,型号是:三星 S6 EDGE,SM-G9205,在大多数机型上运行正常的页面,在这个机器上如下图:
这个页面在近期的变更是从http切换到https,由于之前的页面是http,我们在切换的时候,除了url之外,并未对webview的ssl校验做特殊的处理。
问题就出在这里,webview在加载https的时候,通常会用手机根证书对h5的页面进行校验,这个校验不一定成功。
失败的时候会回调webviewclient的onReceivedSslError函数。
既然如此,我们可以在证书校验失败的情况下,将其跳过,继续加载就可以了,如下:
public void onReceivedSslError(WebView view, android.webkit.SslErrorHandler handler, android.net.http.SslError error) {
handler.proceed();//这里校验失败的时候放过
};
重新运行后发现,这个方法是可行的,他在ssl校验失败的时候绕过了这个步骤。
但是问题又来了,我们切换https,本来就是希望利用ssl这一层,保证加载页面的安全性,现在统一跳过,不是达不到安全的初衷了吗。
继续调试,我们将 onReceivedSslError这里面的SslError信息打出来,发现是下面的错误:
SslError.SSL_INVALID//校验过程遇到了bug
这个错误是webviewclient在校验ssl的过程中,出现了bug。
查阅源码后发现,全量的错误一共有如下几类:
其中有的是证书本身有问题,有的是校验出了bug,因此全部放过虽然是最便捷的,但可能不是最好的。
最后我判断,在ssl校验失败的情况下,如果是校验过程遇到了bug,那就放过,其他情况就cancel:
if(error.getPrimaryError() == android.net.http.SslError.SSL_INVALID ){// 校验过程遇到了bug
handler.proceed();
}else{
handler.cancel();
}
来源:https://blog.csdn.net/li_huorong/article/details/60469607


猜你喜欢
- 方法1:C#Label1.Text = Request.Form["txtName"].ToString();vb.ne
- 前言本文主要写的是:springboot下ueditor上传功能的实现及遇到的一些问题的处理整体项目结构展示Springboot整合uedi
- 一、冻结列DataGridViewColumn.Frozen属性为true时,该列左侧的所有列被固定,横向滚动时固定列不随滚动条滚动而左右移
- 在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计。java.awt中定义了多种布局类,每种布局类对应
- 在构造函数里加上以下代码:this.DoubleBuffered = true;//设置本窗体SetStyle(ControlStyles.
- 一、前言首选,双轴快排也是一种快排的优化方案,在JDK的Arrays.sort()中被主要使用。所以,掌握快排已经不能够满足我们的需求,我们
- 在Spring中进行事务管理非常简单,只需要在方法上加上注解@Transactional,Spring就可以自动帮我们进行事务的开启、提交、
- 本文实例讲述了Android编程绘图操作之弧形绘制方法。分享给大家供大家参考,具体如下:/** * 绘制弧形图案 * @descriptio
- shrio是一个比较轻量级的安全框架,主要的作用是在后端承担认证和授权的工作。今天就讲一下shrio进行认证的一个过程。首先先介绍一下在认证
- 本文实例汇总了Java文件操作。分享给大家供大家参考,具体如下:1.创建文件夹//import java.io.*; File myFold
- 一个专门实现访问sql server数据库增删改查的操作代码,分享给大家,具体内容如下using System;using System.C
- 本文实例为大家分享了Android封装MVP实现登录注册功能,供大家参考,具体内容如下model包:import com.bwei.mvps
- Java 反射机制实例详解一、JAVA是动态语言吗?一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,Ja
- 前言在这个 Spring Security 教程中,我很乐意与您分享如何通过在 Java Web 应用程序中为用户添加角色来实现授权&
- 1. WebView 远程代码执行漏洞描述 Android API l
- 消费逻辑上文 流式图表框架搭建框架搭建好之后着手开发下kafka的核心消费逻辑,流式图表的核心消费逻辑就是实现一个消费链接池维护消
- 工厂模式定义:提供创建对象的接口。为何使用工厂模式工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java
- 本文实例展示了Activiti流程图查看的实现方法,具体步骤如下所示:1、测试用例查看图片代码如下:public void viewImag
- 前言Mybatis作为一个应用广泛的优秀的ORM框架,已经成了JavaWeb世界近乎标配的部分,这个框架具有强大的灵活性,在四大组件(Exe
- 开发设计搞了一个带圆形进度的进度条,在GitHub上逛了一圈,发现没有,自己撸吧。先看界面效果:主要思路是写一个继承ProgressBar的