我想捕获抛出的每个未定义函数错误。JavaScript中是否有全局错误处理工具?用例是从flash中捕获未定义的函数调用。
当前回答
你可以通过给window.onerror赋值函数来监听onerror事件:
window.onerror = function (msg, url, lineNo, columnNo, error) {
var string = msg.toLowerCase();
var substring = "script error";
if (string.indexOf(substring) > -1){
alert('Script Error: See Browser Console for Detail');
} else {
alert(msg, url, lineNo, columnNo, error);
}
return false;
};
其他回答
如果你想用统一的方法来处理未捕获的错误和未处理的承诺拒绝,你可以看看uncaught库。
EDIT
<script type="text/javascript" src=".../uncaught/lib/index.js"></script>
<script type="text/javascript">
uncaught.start();
uncaught.addListener(function (error) {
console.log('Uncaught error or rejection: ', error.message);
});
</script>
它听窗户。除了window.onerror之外,unhandledrejject。
复杂的错误处理
如果你的错误处理非常复杂,因此可能会抛出一个错误本身,添加一个标志来表明你是否已经在“errorHandling-Mode”是很有用的。像这样:
var appIsHandlingError = false;
window.onerror = function() {
if (!appIsHandlingError) {
appIsHandlingError = true;
handleError();
}
};
function handleError() {
// graceful error handling
// if successful: appIsHandlingError = false;
}
否则你会发现自己陷入了一个无限循环。
这对你有帮助吗:
<script type="text/javascript">
window.onerror = function() {
alert("Error caught");
};
xxx();
</script>
我不确定它是如何处理Flash错误的…
更新:它不能在Opera中工作,但我现在正在黑蜻蜓,看看它能得到什么。关于破解蜻蜓的建议来自这个问题:
模拟窗口。onerror在Opera使用javascript
我建议你试试Trackjs。
它将错误日志记录作为一种服务。
设置起来非常简单。只需要在每页中添加一行<script>就可以了。这也意味着如果你决定不喜欢它,它将非常简单地删除。
还有其他服务,如Sentry(如果你可以托管自己的服务器,它是开源的),但它不能做Trackjs所做的事情。Trackjs记录用户在浏览器和web服务器之间的交互,这样你就可以实际跟踪导致错误的用户步骤,而不仅仅是文件和行号引用(可能还有堆栈跟踪)。
还应该保留之前关联的onerror回调
<script type="text/javascript">
(function() {
var errorCallback = window.onerror;
window.onerror = function () {
// handle error condition
errorCallback && errorCallback.apply(this, arguments);
};
})();
</script>