#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 вокруг каждой строки в сценарии, чтобы быть уверенным, что я поймаю все возможные ошибки? Это скорее опровергает идею использования глобального уловителя ошибок.