忽略浏览器中的JS Uncaught异常

时间:2012-03-27 18:54:52

标签: javascript browser

有没有办法告诉浏览器,例如Opera或Chrome,如果遇到未处理的异常,不要停止脚本执行?我只需要在浏览器中测试一些JS脚本,但页面还包含一些代码用于另一个(非常规浏览器)执行环境,因此修改代码作为使用try / catch包装是不实际的。

对于Chrome,我尝试将设置处理程序功能的代码放到window.onerror只返回true,然后错误没有出现在控制台中,但是脚本的执行无论如何都会中止。

具体来说,该页面包含Appcelerator Titanium平台的代码,但我只是测试一般的jQuery代码,所以我想在浏览器中进行。

2 个答案:

答案 0 :(得分:2)

如果以延迟方式调用可疑代码

if(!TextUtils.isEmpty(response)){
    String [] allProvinces = response.split(",");
    /* how should I check whether allProvinces is null or not? 
     * it means the method "split" can possibly return a null value?
     */
    if( allProvinces != null && allProvinces.length > 0){    
        for(String p :allProvinces) {
            String [] array = p.split("//|");
            Province province = new Province();
            province.setProvinceName(array [0]);
            province.setProvinceCode(array[1]);
            weatherDb.saveProvince(province);
        }
    }
}

然后抛出的任何错误都会终止"线程"或者"微任务",但不影响你执行的其余部分。

答案 1 :(得分:0)

尽管你的想法看起来很实际,但实际上却无法强制执行。

相比之下,Java编程语言强制处理已检查的异常(可以从中恢复的异常),而未经检查的异常(例如RuntimeException - 无法恢复的异常)可以只是通常在运行时发生在您的控件之外。由于它们基本上是不可恢复的,因此您的程序必须停止。

与java不同,JS JVM引发的异常无法在已检查和未检查的类别中分离。因为没有这样的区别,所以不可能避免脚本停止。

如果你将功能/无限分开怎么办?你应该如何从中恢复? 每个不同的场景都有一个独特的答案。这就是为什么对您关注的唯一剩余且有效的回应是,每当您担心try catch将会发生并停止您的代码时使用Exception阻止,并专门针对该情况进行处理。

对于window.onerror事件处理程序,它与此问题无关,因为它不捕获运行时异常,它捕获在try catch块中未捕获原始异常时引发的错误即可。这就是为什么你得到了一个非常有趣的例外:xxxxx"附加到实际的原始异常消息。已经发生异常,您的脚本已经停止,您只能按照您想要的方式显示它。