2012-06-06 64 views
3

这窃听我一会儿。我在断言失败时抛出异常,但这只有在我能够实际捕获异常时才有用(在这种情况下,我是alert用户)。如果我无法捕捉到异常,那么JavaScript的合同,并断言

  1. 我依靠浏览器来通知用户存在内部错误(浏览器可能什么也不做,所以用户永远不会发现有问题),以及
  2. 我不进去一看,在,所以无法收拾。

那么,有没有真正在JavaScript处理的断言错误的好办法?有没有办法捕捉未捕获的异常?请注意,我对单元测试,用户错误等不感兴趣 - 我只关心合同编程,用户和开发人员都需要知道是否存在错误。

回答

2

对于断言,有console.assert()。但是,这只会记录消息并继续。

随着HTML5还可以赶上未处理使用window.onerror处理例外。有一个excellent article on dev.opera这可以用来向用户显示奇怪的错误消息,甚至可以将异常记录到服务器。

如果不能使用,你留下了周围的一切包装的try-catch子句(特别是“执行入口点”之类的事件处理程序,超时和CO。)。或者你可以把他们之前处理错误:

function SmartError(message) { 
    Error.call(this, message); 
    $('<div class="error">Some problem occured, the app will stop working</div>') 
     .appendTo("body"); 
    $.post("/log/clientside/js.php", this); 
    ... 
} 

if (something.does(! "work")) 
    throw new SmartError("mysterious problem"); 
+0

的prpblem往往是,这是'onerror',不乱扔恼人的,棘手的错误,聪明的浏览器=)绝对是很好的答案,但! – Rudie