Ошибка не перехватывается функцией jquery start () - PullRequest
1 голос
/ 24 февраля 2010

[Update. Я должен быть более точным, я вижу ...] Смотрите следующий пример в 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] ++» на «это фиктивная строка», все будет работать, и оба предупреждения будут активированы. Есть ли проблема с ошибкой во время выполнения?

1 Ответ

1 голос
/ 24 февраля 2010

Предупреждение не вызвано, потому что ваша функция обработчика ошибок не была успешно определена из-за вашей ошибки Javascript :-) Этот блок кода не может быть проанализирован правильно, поэтому он не запущен.

Настройте это так:

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

Если он в своем собственном теге 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>
...