浏览器兼容'>浏览器兼容性是前端常见问题,经常有人会问:我的代码在xx浏览器上可以用,为什么在HBuilder真机运行或打包的就有问题?
-
手机的webview,是Google做的,也是HBuilder所依赖的。
在Android4.4以前,是Android webkit 浏览器内核,很多HTML5标准语法不支持,canvas性能非常差。
Android4.4起,变成了chromium内核,性能和现代语法支持大幅提升。
从Android5开始,webview脱离rom可单独更新,伴随着chrome的发版,google会在google play store上一起更新Android system webview。
由于google play store被墙,国内用户可通过华为应用市场的镜像下载安装最新版Android system webview。http://a.vmall.com/app/C10730262
目前国内的Android手机webview版本差异很大,光Android5起,从chrome39一直跨度到56,手机用户侧使用了到底是哪个版本是不一定的。
所以HBuilder的开发者需要注意,尽量不要使用chrome35以后的新增的语法,使用普通常规的写法完成业务开发。 -
HBuilder边改边看浏览器的chrome版本就是35
不少开发者抱怨HBuilder为何不升级边改边看的浏览器,原因就是上一条,如果你使用了chrome35以后新增的语法,在边改边看环节就会直接报错。提醒你使用了可能造成兼容性的写法。
很多开发者自己电脑上使用的chrome是最新版,有些代码在chrome最新版没问题,但跑到HBuilder边改边看就有问题,其实这是好事,要知道即使pc用户也很容易使用着低版本浏览器,你写的代码总要为用户服务,避免你这里写的没问题,用户那里出了问题你却不知道。 -
手机默认浏览器不等于webview
国外品牌的安卓手机,自带浏览器就是chrome。而国内安卓手机,自带浏览器大多是QQ浏览器、UC浏览器的贴牌,极个别是自己改造chromium。
所以手机自带的浏览器并不等于webview,在一个平台可运行,不代表另一个平台可兼容。
QQ、UC、360等浏览器也基本是基于chromium做改造,不同版本的浏览器其使用的chromium内核版本也不一样。具体可以打印ua查看。 -
如果你有影响用户的能力,为了给用户更好的体验,可以让用户安装最新版Android system webview。http://a.vmall.com/app/C10730262
在华为和小米手机上,wifi下会自动更新Android system webview。
尤其是有些Android5用户使用的Android system webview 37版本,有硬件加速bug,闪屏花屏,此时升级webview即可解决。 -
最后,有人问可否在打包时直接集成Android system webview,减少浏览器兼容'>浏览器兼容问题?
最新的webview体积高达55M,DCloud的云打包是不支持超过30M的打包请求的。手机用户也比较难接受这种体积。有兴趣的开发者可以自己研究离线打包。
我的建议倒是这样:js里判断当前手机是Android5以上,且webview版本过低,比如低于40,可以提醒用户是否升级webview,然后引导用户去之前贴出的地址下载更新webview。
但不管怎么样,尽量少写可能遇到兼容性问题的代码。
目前HTML5中国产业联盟在推动国内各手机厂商都在wifi下自更新webview,以减少浏览器兼容'>浏览器兼容性问题,有成果后会继续公布。
如果要查阅真机运行和打包的区别,访问此文:http://ask.dcloud.net.cn/article/1322