似乎Firefox会将window.onerror事件处理程序中发生的任何错误视为致命异常,即使捕获到异常也是如此。以下代码示例在IE,Chrome和Safari中按预期工作。在Firefox中,对不存在的abc()方法的调用会立即停止执行,而不是执行catch块和onerror处理程序的其余部分。
这是Firefox中的预期行为还是我做错了什么?
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.7.js"></script>
<script type="text/javascript">
$(document).ready(function() {
window.onerror = function() {
console.log('begin onerror');
try {
abc(); // create a runtime error by calling a method that doesn't exist
} catch(e) {
console.log('catch block');
}
console.log('end onerror');
};
$('#btn').click(function() {
xyz(); // create a runtime error by calling a method that doesn't exist
});
});
</script>
</head>
<body>
<form action="" name="frmEdit">
<input type="button" value="Test" id="btn" name="btn" />
</form>
</body>
</html>
答案 0 :(得分:1)
正如this testcase所示,它与jQuery有关。
使用触发此行为所需的最少代码替换jQuery依赖项将解释此问题或使其更易于在Firefox端进行调试和修复。
[编辑]感谢jrotello,dmethvin和Firefox开发者,underlying issue应该在Firefox 14中修复(你可以在使用http://nightly.mozilla.org/发布之前对其进行测试)