正如其他人所说,围绕侦听器附件的try/catch不会捕获在处理程序中抛出的错误。
如果您想知道处理程序何时抛出错误,可以监听
error
上的事件
window
对象。
如果你想抓住他们,你可以用
preventDefault
上
errorEvent
在那个错误处理程序中。
编辑
:由于某种原因,下面的代码片段无法“捕获”错误,最终在控制台中未被捕获。我在铬合金上测试过它,它起作用了。
const myBtn = document.getElementById("myBtn");
myBtn.addEventListener("click", function() {
console.log("handler 1");
throw "Error in handler1";
});
myBtn.addEventListener("click", function(error) {
console.log("handler 2");
throw "Error in handler2";
});
window.addEventListener("error", function (error) {
error.preventDefault();
console.error("Error caught");
return false;
});
<button id="myBtn">Click</button>