我使用 window.onerror(message,url,line)
来记录我的错误消息,因为它为我提供了比try{}catch(e){}
更多的调试信息。
但是,请考虑以下事项:
function1(); // Generates error
function2(); // Will not be executed
如何确保函数 2 在仍然使用 window.onerror 时触发?
你不能。如果您需要允许以后的代码执行的错误处理,则必须使用 try..抓住。
幸运的是,JavaScript没有任何等同于VB6 On Error Resume Next
的东西;它会使许多糟糕的JavaScript代码变得更糟。
在这里做了你的小提琴的分叉,我所做的只是用捕获的错误显式触发 window.onerror 事件。
似乎几乎是真的:)
try
{
function2();
}
catch(error)
{
window.onerror(error);
}
更新
找到了一种方法来获取行号和 url。代码目前有点混乱,但可以工作,所以它应该让你开始......
try
{
function1();
}
catch(error)
{
var url = error.stack.split('n')[1].match(/(.+)/g)[0];
var line = url.match(//:[0-9]+.+$/g)[0];
url = url.replace('(','').replace(line,'');
line = line.replace(')','').replace('/:','')
window.onerror(error,url,line);
}
这是工作 jsfiddle
与此同时,我找到了一种使用 setTimeout
的方法,但我希望可能有更好的方法:
setTimeout(function1);
setTimeout(function2);
见 http://jsfiddle.net/7y2Ej/1/