一、现象
根据测试和H5开发反馈,新版本测试包,有些H5页面一直无法加载完成,一直无法触发接口,或者触发了接口后,无法获取接口数据
二、排查过程
1、查看不正常的H5 logcat日志,发现没有异常日志,就是没触发onPageFinished;
2、怀疑是单设备问题,于是换几台设备看下,发现问题依旧,复现率极高;
3、测试了一下资讯详情,和普通的H5,如隐私政策,发现问题依旧,所以确认不是某个H5的问题,应该是客户端改了什么导致的;
4、怀疑是什么黑科技把webview全局hook了,查看底层框架的全局改动,回退了几个点,发现问题依旧
5、怀疑底层框架对设备ID进行了新增加持锁(安全整改需要),于是将底层回退为线上版本,发现现象依旧
6、切出线上版本的代码tag,编译打包运行,发现没有问题;
7、至此可以定位出,不是底层框架问题,线上包没有问题,肯定是业务模块里携带了影响全局webview的代码,于是决定才有二分查找排查法
8、通过不断排查,发现 125号包可以(9.8号下午7:41打包)126号包不行 (9.9号上午5:36打包),在这个区间,主app没人提交代码,可以断定,是某个aar在此期间进行了覆盖打包;
于是开始查下各个仓库的git提交记录,最终定位到广告模块提交了如下代码:
非常可疑,大概率是它了,于是将其代码回退,重新代码,问题恢复,至此定位出了问题;
三、问题原因和解决方案:
我们通过查看webview源码发现:
这两个方法,并不是针对当前webview的,而是针对全局webview的,所以当触发了pausetimer以后,会导致全局的webview都将被暂停,无法加载;
所以,业务实现方案尽量不要采用这种方法来解决禁用H5某个资源播放的问题,目前是将此方案移除,采用其他方法来满足业务需求;