我window.onerror
用来捕获和记录客户端错误。我已经阅读了有关这种方法的各种警告,但我无法找到有关此特定案例的任何信息。
由于某种原因,IE9 似乎没有捕获堆栈溢出异常。下面的示例在 Chrome 和 Firefox 中运行以及我在 IE9 中使用 devtools 并将浏览器模式设置为 IE8 或 IE7 时捕获了这两个错误。但是,在 IE9 模式下运行时,它只捕获'test' is undefined
异常,而忽略堆栈溢出异常。
我整理了一个简单的例子来证明这一点:
window.onerror = errorHandler;
function errorHandler (msg) {
alert(msg);
}
setTimeout(function () {
test.test = "test";
}, 1000);
setTimeout(function stackoverflow() {
stackoverflow();
}, 2000);
这也是一个工作示例:http: //jsfiddle.net/Mzvbk/1/
任何人都可以解释为什么会这样吗?
2012 年 8 月 29 日更新
我也在Internet Explorer 开发人员中心发布了这个问题,但到目前为止它并没有给我太多帮助。
在这一点上,最好的猜测(正如@RyanKinal 在他的评论中所建议的那样)是,由于超出了调用堆栈大小,因此没有空间将调用错误处理程序放在堆栈上。
我仍然愿意相信错误处理是与普通堆栈分开处理的,因为它似乎在其他浏览器(甚至是旧版本的 IE)中,但如果不是这种情况,很高兴看到参考,错误报告或某种声明,表明这实际上是 IE9 的情况。
2012 年 9 月 5 日更新
正如 Ren 和 Vega 在他们的评论中所描述的,Firefox 15 有时(似乎是随机的)似乎也吞下了这个例外。