注入的JS分配window.onerror无法触发

时间:2013-09-03 16:23:39

标签: javascript event-handling onerror

我需要运行第三方JS来扫描jserrors。我在chrome的控制台中运行以下内容

window.onerror = function(errorMsg, url, lineNumber) {
  alert(errorMsg);
}

throw new Error('foo');

我希望控制台都能告诉我错误以及弹出显示错误消息的警告。警报永远不会被触发,我认为事件没有被触发。为什么不呢?

1 个答案:

答案 0 :(得分:2)

Chrome Developer Console不会调用用户定义的错误事件侦听器,如果立即引发错误(根据this answerPaul S.)。

“及时”抛出错误:

> window.onerror = function () {console.log('error!');};
function () {console.log('error!');}
> throw new Error();
Error

抛出延迟的错误:

> window.setTimeout(function() {throw new Error()}, 0);
xxxx
error!
Uncaught Error

xxxx setTimeout()的特定返回值)

<小时/> 以下是原始代码段,其中指出Chrome Dev Console以某种方式更改了内部行为:

// #btn is a simple button
document.getElementById("btn").addEventListener("click", function () {
    var script = document.createElement("script");
    script.innerHTML = "window.onerror=function(){alert('An error occurred!');};throw new Error('42');";
    document.head.appendChild(script);
});

此代码将在普通HTML文件中执行。