window.onerror没有在Firefox中触发

我正在尝试创建一个javascript错误日志记录基础结构。

我正在尝试将window.onerror设置为我的error handling程序。 它适用于IE 6,但是当我在Firefox中运行它时,它遇到了一些冲突的onerror方法。

 var debug = true; MySite.Namespace.ErrorLogger.prototype = { //My error handling function. //If it's not in debug mode, I should get an alert telling me the error. //If it is, give a different alert, and let the browser handle the error. onError: function(msg, url, lineNo) { alert('onError: ' + msg); if (!debug) { alert('not debug mode'); return true; } else { alert(msg); return false; } } } //Document ready handler (jQuery shorthand) $(function() { log = $create(MySite.Namespace.ErrorLogger); window.onerror = log.onError; $(window).error(function(msg, url, line) { log.onError(msg, url, line); }); }); 

如果我使用setTimeout("eval('a')", 1); 其中’ a ‘是一个未定义的变量,我的error handling程序是被解雇的(它的工作原理)。 但是,我的错误记录器需要捕获访问网站的客户端抛出的所有错误,而不仅仅是错误的代码在一个地方。

代码位于从网站的基页(C#)调用的.js页面上。 该站点也使用jQuery,所以我有一个覆盖jQuery绑定函数的函数,该函数在Firefox 3和IE 6中都能正常工作。

我知道Firefox看到错误,因为它出现在错误控制台和Firebug中,但我的 window.onerror函数仍未被调用。

有关如何覆盖Firefox正在做什么的任何想法?

以下是在IE 6和Firefox 3.0.11中测试和使用的:

   Title    
...content...

如果你正在加载的其他一些JavaScript库也将自己附加到window.onerror你可以这样做:

  

以上内容允许您根据需要附加尽可能多的onerror处理程序。 如果已经有一个现有的自定义onerror处理程序,它将调用那个,然后是你的。

请注意, addHandler()可用于将多个处理程序绑定到任何事件:

 addHandler(window, 'onload', function () { alert('one'); }); addHandler(window, 'onload', function () { alert('two'); }); addHandler(window, 'onload', function () { alert('three'); }); 

这段代码是新的,有点实验性。 我不是100%确定addEventListener确实完成了手动附件所做的事情,并且如评论所述, attachEvent按照它们所附的相反顺序触发处理程序(因此您将在上面的示例中看到“三,二,一”)。 虽然不一定是“错误”或“不正确”,但它与addHandler中的其他代码相反,因此可能导致从浏览器到浏览器的不一致行为,这就是我删除它的原因。

编辑:

这是一个完整的测试用例来演示onerror事件:

   Title    
...content...

当上面的代码放在test.htm中并从本地idk加载到Internet Explorer中时,你会看到一个对话框,说'blah' is undefined;undefined;undefined

当上面的代码放在test.htm中并从本地磁盘加载到Firefox 3.0.11(以及本编辑中最新的3.5 – Gecko / 20090616)时,你会看到一个对话框,显示[object Event];undefined;undefined 。 如果没有发生这种情况,那么您的Firefox副本未正确配置或以其他方式损坏。 我可以建议您删除Firefox,删除您的本地配置文件(有关如何在此处找到您的配置文件的信息)并重新安装最新版本并再次测试。

记得从任何自定义window.onerror处理程序返回true ,否则firefox会处理它。

看来jQuery 1.3.x中存在一个开放的错误(#3982) – jQuery.error事件获取的参数不正确 。 最后一次更新是2个月前的评论:

鉴于错误事件有多疯狂,以及它的使用频率,我同意删除对它的支持是最容易的。 我已经在文档中添加了一个注释,因为它无论如何都没有用。

我想我会自己设置window.onerror,类似于Grant发布的内容。 另外, FireFox:addEventListener Vs. window.onerror提到“element.addEventListener”,导致错误不会激活“window.onerror”