解决 Edge 浏览器 SCRIPT5022: Exception thrown and not caught

JS 代码在 Safari, Chrome, Firefox 都是好的,就只有 Edge 莫名其妙地报错。

1
SCRIPT5022: Exception thrown and not caught

未捕获的异常?EXM?你倒是说是什么异常啊?行号还是错的?点过去无法定位错误位置?hash-navigation.js?我的项目里根本都没有这个 js 啊喂!

后来怎么解决的呢?因为这个错误是在滚轮滚动的时候打出来的,我在项目中各个 onScroll 方法外层加了 try catch 块。

1
2
3
4
5
try {
// ...
} catch (e) {
console.log(e)
}

于是真相水落石出了。

某处代码迭代了 DOM 元素,而在 Edge 中,document.getElementsByClassName 的返回不支持迭代,其他浏览器不存在这个问题。

1
2
3
4
const doms = document.getElementsByClassName('some-class')
for (const dom of doms) { // Edge 会报错
// ...
}

换一种兼容性更好的迭代方式就好了

1
2
3
4
5
const doms = document.getElementsByClassName('some-class')
for (let i = 0; i < doms.length; i++) { // Edge 不会报错了
const dom = doms[i]
// ...
}

如果你也遇到了这个异常,可以试试加 try catch 的办法,从而定位问题根源。

评论