前面已经把项目跑起来了,且能正常渲染,当我正在沾沾自喜的时候,测试狠狠的给了我一记大嘴巴
遇见的问题是,在我本地调试的设备上运行没有问题,提交到测试的时候,他用自己的安卓设备安装软件,出现了如下报错
这个报错告诉咱,说 replaceAll 不是一个函数,那怎么解决呢,先去项目里搜吧
一搜,发现是 Cesium 包里面的调用,假设 Cesium 没有这种低级 Bug,那就是这个 api 本身的问题了,先问问 gpt
可以看到语法比较新,因为我们用法 Cesium 是动态引入的且 Cesium 文件本身就很大,所以,会跳过 uniapp 的这个 ES6 -> ES5 的流程
再去 mdn 上搜一下这个 api
然后怀疑,考虑是某些安卓设备的 js 引擎不支持这个 api,那怎么解决呢?很简单,在 String 原型上添加一个这样的 api 并能实现全局替换就行了
mdn 下面写了 xxxx polyfill,大概在两年前我有幸了解过这个概念,地址在这
https://www.bilibili.com/video/BV12q4y1E7Gg/?spm_id_from=333.999.0.0&vd_source=78a1c24507da39c051cd276e2fbd5585
然后去网上搜一个 replaceAll 的 polyfill
https://juejin.cn/s/string.replaceall%20polyfill
找到了如下代码,经过自己简单验证,可以替代示例中的写法,但是没有完全替代 mdn 描述的,mdn 说如果不是全局正则表达式,会抛出异常
本人验证结果如下,入参的正则没有 /g 也正常正常通过了
虽然和 mdn 描述的不一样,但是目前满足我的使用需求了,本人的需求就是能把不支持此 api 的安卓设备,在原型上添加一个这样的 api 并能实现全局替换就行了
然后,添加到 Cesium 执行前的代码中,再次编译,运行,报错消失
完整的 uniapp + cesium 项目地址在这,需要自取
https://github.com/kmq116/mars3d-uni-app
本文使用 文章同步助手 同步