【问题标题】:Error is not caught by jquery start() functionjquery start() 函数未捕获错误
【发布时间】:2010-02-24 19:47:18
【问题描述】:

[更新。我需要更精确,我明白了......] 请参阅以下 javascript 示例:

<html>
  <head>
    <script>
      window.onerror = function() {
        alert('error'); // this one works
        try {i.dont.exist += 0;}
        catch(e) {
          // do some stacktrace stuff, this does not trigger
          alert(e.stack);
        }
      };
    </script>
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script>
    <script>
      $(document).ready(function() {
        foo[1]++;
      });
    </script>
  </head>
<body>
  <p>Hello world.</p>
</body>
</html>

2.警报没有触发。为什么? 如果我将“foo [1] ++”替换为“这是一条虚假的行”,那么一切正常,两个警报都会被触发。是否存在一些运行时错误问题?

【问题讨论】:

    标签: javascript jquery error-handling stack-trace onerror


    【解决方案1】:

    由于您的 Javascript 错误,您的错误处理函数未成功定义,因此未触发警报 :-) 该代码块无法正确解析,因此无法运行。

    这样设置:

    <script>
      $(function() {
        window.onerror = function() {
          // ...
        };
      });
    </script>
    

    如果它在它自己的脚本标签中,那就没问题了。现在,您可能需要重新考虑将错误处理程序的定义延迟到“就绪”事件处理,因为在到达该点之前您可能会遇到错误。

    [edit] 好的,这是一个完整的例子,它对我来说很好用:

     <html>
       <head>
         <script>
           window.onerror = function() {
             alert("OH NO THERE HAS BEEN AN ERROR!");
           };
         </script>
         <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script>
         <script>
           $(function() {
              here is some bogus stuff that will cause Javascript parse errors.
           });
         </script>
       </head>
       <body>
         <p>Hello world.</p>
       </body>
     </html>
    

    【讨论】:

    • 好的,我将 onerror 处理程序移动到它自己的脚本标签。它不会改变行为,就绪函数内部的错误不会触发“堆栈”...
    • 感谢您的完整示例。这对我也有用,但这不是重点。我更新了上面不工作的例子。
    • 嗯,两件事。首先,捕获异常时不会调用“onerror”函数。其次,据我所知,window.onerror 在抛出错误/异常时不会被调用。事实上,我什至无法让 try/catch 正常工作。基于此处的一些 cmets [bugzilla.mozilla.org/show_bug.cgi?id=65683#c20],在我看来,“window.onerror”似乎已被有效弃用;它似乎早于“try/catch”机制。
    猜你喜欢
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2018-06-12
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多