2010-03-05 41 views
12

如何覆盖JavaScript中的全局异常处理程序,以便它成为所有未捕获异常的顶级处理程序?全局JavaScript异常处理程序(在Chrome中)

编辑:window.onerror没有工作,代码为:

<HTML> 
<HEAD> 
<script language='javascript'> 
    window.onerror = function (em, url, ln) { 
     alert(em + ", " + url + ", " + ln); 
     return false; 
    } 

    function fGo() { 
     try 
     { 
      var a = b; // error here : b not defined 
     } 
     catch (e) 
     { 
      throw e; 
     } 
    } 
</script> 
</HEAD> 
<BODY> 
    <button onclick='fGo()'>GO</button> 
</BODY> 
</HTML> 

我测试的铬,顺便说一句。开发人员控制台注册未捕获的异常,但window.onerror中的alert()未出现。

回答

14

Google Chrome不支持window.onerror,显然它没有在webkit中实现。

更新:现在Chrome也支持window.onerror。 (我有版本25注释意味着早期版本以及)

我所做的是使用curring包装JQuery创建代理,总是在JQuery函数中执行try...catch

我在www.js-analytics.com中使用它,但该解决方案仅适用于JQuery脚本。

+0

没错。 WebKit最近在修复这个bug方面取得了一些进展。目前尚未修复,但您可以在此获得更新链接:https://bugs.webkit.org/show_bug.cgi?id = 8519 – 2010-09-13 13:46:12

+0

根据http://groups.google.com/group/js-test-驱动程序/ browse_thread /线程/ 14c7e6d615a2b803?pli = 1它应该在Chrome 10中修复 – Korny 2011-04-15 03:36:16

+3

我使用Chrome 14(最新版本)和window.onerror工程! – Nick 2011-10-01 00:08:07

3
window.onerror = function(errorMsg, url, lineNumber) { 
    // code to run when error has occured on page 
} 
0

也许您在寻找window.onerror不确定这是否适用于所有浏览器。

+0

这不是,特别是在Safari上,但这是一个非常好的开始。 – 2010-03-05 05:22:16

+1

最新版本的Safari(和Chrome)支持它。作为参考,我在Mac OS X上的Safari 5.1和Chrome 14上进行了确认。不知道它们何时最终添加到这些浏览器,但现在可在所有主流浏览器上使用。 – Nick 2011-10-01 00:10:18