H5项目中ios12系统兼容性问题解决

做一个嵌入式的H5项目时,我们的PM让我解决一个兼容性问题,就是ipod touch 6因为无法升级系统,只能最高ios12,但是该H5项目在更高的ios系统设备中能正常显示,ios12却无法显示,查询了大量资料,在网上也看了好多解决ios低版本不兼容的博客,大多是说低版本ios系统es6语法,要用babel-loader搭配polyfill去降语法,es5是可以兼容的,我的项目中其实是有babel的但是还是抱着试试看的心态一个一个去试,没想到都失败了,只能决定自己解决了,以下是我的思路。

  1. PC端,最新ios系统的设备,ios12系统的设备同时访问该h5页面
  2. 该页面用vue框架实现,我用上述三个设备访问了其他vue项目页面可以正常访问
  3. 我又找到该h5项目最开始的代码版本,发现也可以访问,也就是说,肯定是后来写的东西有问题
  4. 切回最新的h5项目,我把根目录的<router-view></router-view>注释,在div里随便写了点东西,把main.js里后加的代码全部注释,发现ios12的设备能显示我在div里写的东西了,说明问题就在某个js文件里,这时候我大概能想到,应该是某个语法问题。
  5. 我在一个一个解开注释,直到定位到详细的文件,在进入该文件,继续一个个注释,最终定位到两个js文件,一个里面的??语法有问题,另一个里面的?.语法有问题!!!
  6. 问题总结:因为???.是2020年的新语法,所以babel-loader可能还没处理到这一块,把这两个语法改了,h5页面的ios12兼容问题完美解决!!!
  7. 替代方案?.可以用&&来代替,例如a?.b可以写成a&&a.b,??千万不要直接改成三元语法,因为??对于空串和0的判断为true,所以需要根据你的项目实际情况来写判断或者三元
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐