«Ошибка сценария» сообщается в window.onerror без межсайтового сценария

#javascript #error-handling

Вопрос:

Почти каждая ошибка JS, которую я получаю с помощью window.onerror, — это бесполезное сообщение «Ошибка сценария».

Я прочитал все, что смог найти по этому поводу, но всегда говорится, что это вызвано межсайтовыми сценариями, но в моем коде их нет.

Почему появляются эти бесполезные сообщения об ошибках и как я могу заменить их полными сообщениями, которые появляются в консоли?

В качестве тестового примера я создал минимальную пару кода HTML/JS. Это HTML-страница, testpage.html:

 <html>
<head></head>
  <body>
    <script src="/js/testpage.min.js"></script>
  </body>
</html>
 

и JS-скрипт:

 window.onerror = function(msg, url, lineNo, columnNo, error) {
  // code goes here to generate log entry on the server
  return true;
}
// generate illustrative sample error
var jsonData = "";
var data = JSON.parse(jsonData);
 

При этом msg = «Ошибка сценария» и другие параметры либо равны нулю, либо равны нулю. Консоль Google DevTools отображает полную ошибку:

 Uncaught SyntaxError: Unexpected end of JSON input
  at JSON.parse (<anonymous>)
  at testpage.min.js:7
 

Любая помощь в регистрации полных сообщений об ошибках будет только приветствоваться. Я в полной растерянности.

ИЗМЕНИТЬ: Переделать, чтобы сделать проблему более ясной.

Комментарии:

1. Используйте блок try/catch вокруг кода, с помощью которого вы хотите поймать ошибку, например try{JSON.parse('')}catch(e){alert(e)} , это выдаст вам сообщение, которое вы получите на консоли.

2. @patrickevans: Это прекрасно сработало бы в такой ситуации. Но ошибка JSON здесь-всего лишь наглядный пример гораздо более широкой проблемы: почему вообще должна возникать «ошибка сценария»? Разве мне не пришлось бы помещать блок try/catch вокруг каждой строки в сценарии, чтобы быть уверенным, что я поймаю все возможные ошибки? Это скорее опровергает идею использования глобального уловителя ошибок.