ie 引发了异常但未捕获

记一次不小心搞坏了前几天已经解决掉的 ie 兼容问题, 简直要疯, 因为明天就要用!!!

就随便写点吧, 因为焦作和痛苦了几小时, 后面还有一大堆重要事呢(mockm 更新的版本貌似出问题了, 已有百来个人更新了此版本, 论回归测试的重要性).

本来之前花了两天解决了 ie 的兼容问题, 提交了代码. 一周后说要找个时间写一篇兼容文章, 为了文章结果可重现, 就删了依赖. 撤回了一些感觉无关的修改.

然后重新打包时, 在 ie 上跑不起来了, 报错 引发了异常但未捕获, 还原代码也没有用, 还原不了到上次 build 时的文件状态了, 不知道是依赖问题还是有关键的修改没有保存到版本库.

  • 尝试使用过 babel-polyfill, core-js@3, browserslist 一系列配置都不行
  • 把代码中的 Symbol 换成普通的 key 也不行
  • 网上测试过各种方案还是不行, 不知道是不是有某个第三方依赖使用了 Symbol 造成的
  • 7 小时之间一直在测试各种方法, 连续几十次想放弃过后, 直接找了一个线上 cdn 解决了…
  • 忘记了之前是怎么处理这个问题的, 没有使用什么线上 cdn, 应该关键代码也都全部提交的.

ie 报错 SCRIPT5022: 引发了异常但未捕获 但又不显示哪行错了, 是什么错. 这时候需要把脚本进入全局 try/catch:

try {
  // 原脚本
} catch (error) {
  console.log('error', error) 
}

然后这时候才能得到具体错误, 例如 error TypeError: Incompatible receiver, Symbol required.

这时候大约可以判断是 Symbol 语法不兼容导致, 引入对应的 polyfill 即可, 例如 https://cdn.jsdelivr.net/npm/symbol-es6/dist/symbol-es6.min.js .

上一篇:团队冲刺DAY6


下一篇:vue项目 IE浏览器打开报错::strict 模式下不允许一个属性有多个定义