uniapp app端 + cesium + mars3d 开发指北 (三)

前面已经把项目跑起来了,且能正常渲染,当我正在沾沾自喜的时候,测试狠狠的给了我一记大嘴巴

遇见的问题是,在我本地调试的设备上运行没有问题,提交到测试的时候,他用自己的安卓设备安装软件,出现了如下报错

这个报错告诉咱,说 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

本文使用 文章同步助手 同步

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容