Firefox无法正确处理window.onerror中的try / catch块

时间:2011-11-21 20:26:48

标签: javascript firefox dom

似乎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>

1 个答案:

答案 0 :(得分:1)

正如this testcase所示,它与jQuery有关。

使用触发此行为所需的最少代码替换jQuery依赖项将解释此问题或使其更易于在Firefox端进行调试和修复。

[编辑]感谢jrotello,dmethvin和Firefox开发者,underlying issue应该在Firefox 14中修复(你可以在使用http://nightly.mozilla.org/发布之前对其进行测试)