H5项目中ios12系统兼容性问题解决
做一个嵌入式的H5项目时,我们的PM让我解决一个兼容性问题,就是ipod touch 6因为无法升级系统,只能最高ios12,但是该H5项目在更高的ios系统设备中能正常显示,ios12却无法显示,查询了大量资料,在网上也看了好多解决ios低版本不兼容的博客,大多是说低版本ios系统es6语法,要用babel-loader搭配polyfill去降语法,es5是可以兼容的,我的项目中其实是有babel的但是还是抱着试试看的心态一个一个去试,没想到都失败了,只能决定自己解决了,以下是我的思路。
- PC端,最新ios系统的设备,ios12系统的设备同时访问该h5页面
- 该页面用vue框架实现,我用上述三个设备访问了其他vue项目页面可以正常访问
- 我又找到该h5项目最开始的代码版本,发现也可以访问,也就是说,肯定是后来写的东西有问题
- 切回最新的h5项目,我把根目录的
<router-view></router-view>
注释,在div
里随便写了点东西,把main.js
里后加的代码全部注释,发现ios12的设备能显示我在div里写的东西了,说明问题就在某个js文件里,这时候我大概能想到,应该是某个语法问题。 - 我在一个一个解开注释,直到定位到详细的文件,在进入该文件,继续一个个注释,最终定位到两个js文件,一个里面的
??
语法有问题,另一个里面的?.
语法有问题!!! - 问题总结:因为
??
和?.
是2020年的新语法,所以babel-loader
可能还没处理到这一块,把这两个语法改了,h5页面的ios12兼容问题完美解决!!! - 替代方案:
?.
可以用&&
来代替,例如a?.b
可以写成a&&a.b
,??
千万不要直接改成三元语法,因为??
对于空串和0的判断为true
,所以需要根据你的项目实际情况来写判断或者三元