是否有一个全局浏览器对象我可以添加一个侦听器来捕获所有抛出的错误?

Is there a global browser object I can add a listener to catch all thrown errors?

我正在使用 Selenium 来抓取一个 AngularJS 网站,并想创建一个包含所有抛出错误的列表(我真正感兴趣的具体错误是这些 lex errors). AngularJS exposes $exceptionHandler 覆盖异常处理行为。但宁愿尽可能远离修改应用程序代码,因为这些是远程测试。

我正在使用 Firefox,所以 browser.manage().logs() fails. I suspect this question is closely related to Log console errors using protractor - this SO answer

我已经尝试了 window.onerrorwindow.addEventListener('error', () => { ... }); 但它们都没有捕捉到抛出的错误。我想知道 AngularJS 是否正在做一些阻止传播到 window 的事情?

我的目标:

window.thrownErrors = [];
[Some global object].throw = (error) => {
  console.error(error);
  window.thrownErrors.push(error);
}

throw new Error('throw test');
console.log(window.thrownErrors); // => ['throw test']

添加事件处理程序时使用useCapture选项:

window.addEventListener('error', () => { ... }, true);

第三个参数可以是一个 Boolean 指示是否在 之前 将此类型的事件分派给已注册的侦听器 EventTarget它在 DOM 树中。通过树向上冒泡的事件不会触发指定使用捕获的侦听器。事件冒泡和捕获是传播发生在嵌套在另一个元素中的元素中的事件的两种方式,当两个元素都为该事件注册了句柄时。事件传播模式决定了元素接收事件的顺序。有关详细说明,请参阅 DOM Level 3 Events and JavaScript Event 命令。如果未指定,useCapture 默认为 false

有关详细信息,请参阅