安卓部分手机(vivo Y5s)使用webview加载链接后白屏

在开发的过程中,经常会使用uniapp+vue3+vite开发项目,并打包成H5使用webview嵌套到APP当中,但是一般不会出现问题,除非他是低版本的vivo手机。

问题现象

uniapp引入elementplus出现报错events.flatMap is not a function
events.flatMap is not a function
globalThis is not defined

问题原因

旧版本的手机不支持很新的ECMAScript语法,包括但不限于2015版本

解决办法

events.flatMap is not a function

events.flatMap is not a function 这个错误通常发生在不支持 Array.prototype.flatMap 方法的 JavaScript 环境中。这个方法是在 ES2019 (ECMAScript 2019) 中引入的,所以一些老版本的浏览器或者 JavaScript 环境可能不支持这个方法。
为了解决这个问题,你可以采取以下几种方法:

  1. 使用 Polyfill: 你可以使用 core-js 或者其他 polyfill 库来添加 flatMap 方法的支持。在你的主文件(如 main.js 或 main.ts)中引入 core-js 的 flatMap polyfill:
import 'core-js/features/array/flat-map';
  1. 手动实现 flatMap: 如果你不希望添加额外的 polyfill,你可以选择手动实现 flatMap 方法。例如:
if (!Array.prototype.flatMap) {
  Array.prototype.flatMap = function flatMap(callback, thisArg) {
    return this.reduce((acc, item, index, array) => {
      const mapped = callback.call(thisArg, item, index, array);
      return acc.concat(mapped);
    }, []);
  };
}
  1. 更新 JavaScript 环境: 如果可能的话,更新你的 JavaScript 环境到一个支持 flatMap 的版本。这可能意味着更新浏览器或者使用最新的 Node.js 版本。
  2. 检查 Element Plus 版本: 如果你在使用 Element Plus,确保你使用的是适合你项目环境的版本。有时候,库的某些版本可能使用了较新的 JavaScript 特性,而这可能不兼容你的项目环境。
  3. 检查 UniApp 配置: 确保你的 UniApp 配置(如 vue.config.js 或 manifest.json)没有设置任何可能导致这个问题的选项。
  4. 调试和测试: 使用浏览器的开发者工具来调试你的应用,看看是否能在控制台找到更多关于这个错误的上下文信息。这样可以帮助你更准确地定位问题所在。

globalThis is not defined

globalThis is not defined 错误通常发生在较旧的 JavaScript 环境中,因为这些环境不支持 globalThis 这个全局对象。globalThis 是在 ES2020 (ECMAScript 2020) 中引入的,用于在不同的 JavaScript 环境中(如浏览器、Node.js、Web Workers 等)提供一个统一的访问全局对象的方式。
为了解决这个问题,你可以采取以下几种方法:

  1. 使用 Polyfill: 你可以使用 core-js 或者其他 polyfill 库来添加 globalThis 的支持。在你的主文件(如 main.js 或 main.ts)中引入 core-js 的 globalThis polyfill:
import 'core-js/stable/global-this';
  1. 手动定义 globalThis: 如果你不希望添加额外的 polyfill,你可以选择手动定义 globalThis。例如:
if (typeof globalThis === 'undefined') {
  var globalThis = Function('return this')();
}
  1. 检查 UniApp 配置: 确保你的 UniApp 配置(如 vue.config.js 或 manifest.json)没有设置任何可能导致这个问题的选项。
  2. 更新 JavaScript 环境: 如果可能的话,更新你的 JavaScript 环境到一个支持 globalThis 的版本。这可能意味着更新浏览器或者使用最新的 Node.js 版本。
  3. 调试和测试: 使用浏览器的开发者工具来调试你的应用,看看是否能在控制台找到更多关于这个错误的上下文信息。这样可以帮助你更准确地定位问题所在。
  4. 检查第三方库: 如果这个错误是由第三方库引起的,那么可能需要检查该库的文档或者更新到兼容的版本。

总结

一些JavaScript语法运行在低版本的Android手机上会导致手机白屏,此时如果报和上面相同的错误的话,则都可以采用第一种方式来使用 Polyfill,兼容一些相关的语法即可。

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值