前言
在日常的项目测试阶段,QA 一般都喜欢把设备兼容性这类问题放在比较靠后的时间节点上,当收到这类问题的报障的时候意味着留给我们解决的时间并不多了。
刚毕业的时候试过几次都是临近上线了才 bugfix 这类问题,可谓惊险。那么在时间紧迫的情况下怎么才能快速定位并且解决这类问题呢?这篇文章分享下自己在这方面的一些方法及经验。
问题表现
问题表现分为两种比较常见的类型:语法错误类、样式兼容类
语法错误类通常的表现为:打开页面或者某个操作后就白屏了,甚至连 vconsole 也看不到, 但在高级版本浏览器或者出厂年份较新的手机打开又是没问题的。常见于安卓设备(早些年的设备,厂商也已经停止系统推送升级),比如我们内部的要求是支持到 Android5.0 设备。
样式兼容类这里就不赘述。
解决方案
-
首先要做的事情不是着急着去使用搜索引擎,先定位浏览器内核版本。
-
也就是确定好内嵌 WebView 的 Chrome 内核版本 。可以跑个空白的页面或者其他正常展示 H5 页面加载 vconsole , 获取浏览器的内核版本。如果觉得加载 vconsole 麻烦可直接在页面 Toast navigator.appVersion 的信息。
-
一般来说我们 vconsole 控制台也可看到错误类型,但没有 sourceMap 能得到的信息并不多。所以我们一开始先要确认浏览器内核版本,将问题暴露在桌面浏览器上方便我们后续调试及确切的定位问题。
-
-
接着就需要我们多动用搜索工具,搜索下载 Chrome xx 版本 。
- 搜索的版本号不一定要对应一致,只要小于等于 Webview 上的内核版本即可。(比如:我们内部 Android5.0 设备的 Webview 的 Chrome 内核版本是 44, 我下载了个 Chrome40 版本一直存放在电脑中备用。)
-
最后一步就是具体定位问题,通过 sourceMap 寻找问题的蛛丝马迹(比如:上下文一些第三方库的注释)。
- 如果是样式兼容问题那就更好处理了,所见即所得,比在移动设备上会快不少。需要重点关注的是检查项目Changes,看下这期项目的改动是不是加入了额外的第三方以来包,尤其需注意内部的包(语法转换、Polyfill可能存在遗漏等)。