【问题标题】:How to continue javascript execution when receiving errors during load加载期间收到错误时如何继续执行javascript
【发布时间】:2011-04-10 18:00:48
【问题描述】:

不确定表达问题的最佳方式,但假设您使用 jQuery 来设置各种类似的东西:

<script>

    function doSecond(){
        alert("Hi");
    }

    function dofirst(){
        var x = asdasd;
    }

    $(dofirst);
    $(doSecond);

</script>

所以,假设 dofirst 和 dosecond 是完全独立的。如果 dofirst 抛出异常,当然它会抛出异常,那么 doSecond 将永远不会触发。我理解为什么会发生这种情况,但我想知道是否有一种方法可以解决这个问题,而不必包装我想要设置的 EVERY 类型的 jQuery 处理程序试一试。例如,我宁愿不这样做:

try{
 $(doFirst);
}
catch{
 //maybe log here?
}

try{
 $(doSecond);
}
catch{
 //maybe log here?
}

现在,如果您想知道我为什么要这样做?好吧,以您现在正在查看的页面上的代码为例:

<script type="text/javascript">
        $(function() {
            $('#title').focus(function() { $('#how-to-tag').hide(); $('#how-to-format').hide(); $('#how-to-title').fadeIn('slow'); });
            $('#wmd-input').focus(function() { $('#how-to-tag').hide(); $('#how-to-format').fadeIn('slow'); $('#how-to-title').hide(); });
            $('#tagnames').focus(function() { $('#how-to-tag').fadeIn('slow'); $('#how-to-format').hide(); $('#how-to-title').hide(); });
        });
    </script>

当你点击某些 dom 元素时,真的有必要吗?不,但是如果你在那个函数中犯了一个错误,那么很可能你真正需要运行的其他 javascript 可能永远无法设置。

【问题讨论】:

  • 最好的方法是让你的代码不抛出异常。页面错误应始终被视为错误并予以修复。
  • 所以最好的解决办法是不犯错? +1 :)

标签: javascript jquery error-handling


【解决方案1】:

确保事情彼此独立运行的几种方法:

  • 正如你所说,尝试/抓住每个

  • 在 setTimeout(或 无论 jQuery 语法糖是什么 是为了那个)

  • 分离成不同的&lt;script&gt;

【讨论】:

    【解决方案2】:

    显然从不抛出异常是一个荒谬的建议。尤其是在许多浏览器/版本/服务器启动/服务器关闭的世界中。网站 JS 的破解方法有很多,很难找到任何大小的网站都不会抛出某种类型的异常(在控制台检查中)。

    您可以创建一个简单的包装器(或扩展现有的 jQuery 方法)

    function safeonload(fn){
       $(function(){
         try{
           fn();
         }catch{
            //log?
         }
       });
     }
    
     safeonload(doFirst);
     safeonload(doSecond);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2013-05-24
      • 2022-08-02
      • 2020-03-26
      相关资源
      最近更新 更多