Журнал показывает объект ошибки: {"isTrusted": true} вместо фактических данных ошибки

у меня есть обработчик событий, который выглядит так:

window.addEventListener('error', function (e) {

    SendLogErrorToServer('Error: ' + e.message +
                         'Error object: ' + JSON.stringify(e) +
                         'Script: ' + e.filename +
                         'Line: ' + e.lineno +
                         'Col: ' + e.colno +
                         'Nav: ' + window.navigator.userAgent));

}, false);

проблема в том, что то, что я получаю, выглядит так:

Error: Script error.Error object: {"isTrusted":true} Script: Line: 0 Col: 0 Nav: Mozilla/5.0

Как вы можете видеть, нет номера строки или сообщения об ошибке, которое полезно. Что мне нужно изменить, чтобы получить номер строки и сведения об ошибке?

2 ответов


в этом случае вам нужно знать два момента. Обе точки не зависят друг от друга и должны быть исправлены, чтобы решить вашу проблему.

первый

ошибка, с которой вы столкнулись, - это особый тип ошибок, называемый Script Error

"ошибка скрипта" - это то, что браузеры отправляют в onerror обратный вызов, когда ошибка возникает из файла JavaScript, обслуживаемого из другого источника (другой домен, порт, протокол). Это больно, потому что даже хотя происходит ошибка, вы не знаете, что это за ошибка, ни из какого кода он исходит.

это не ошибка JavaScript

браузеры намеренно скрывают ошибки происходящие из файлов сценариев различного происхождения для обеспечения безопасности причины. Это, чтобы избежать сценария непреднамеренно утечки потенциально конфиденциальная информация для обратного вызова onerror, который он не контролирует. По этой причине, браузеры только дают window.onerror понимание ошибок происходящий из того же домена. Все мы знаем, что ошибка произошло-больше ничего!

исправить эту проблему:

чтобы исправить и получить нормальный объект ошибки,проверить это блоге

второй

когда вы пытаетесь stringify любой Error объект, результат не будет удовлетворительным вообще, потому что вы потеряете почти все данные.

причина

JSON.stringify имеет дело только с перечисляемыми свойствами, но Error объект хранит контекстные данные в свойствах inenumerable.

исправить эту проблему

есть несколько решений, но это может быть прямо вперед

JSON.stringify(err, ["message", "arguments", "type", "name"])

это выбирает свойства, которые вы хотите, и генерирует строку для вас.


" ошибка скрипта", вероятно, означает, что проблема заключается в попытке выполнения скрипта из внешнего домена.

У вас нет информации о номере строки и деталях ошибки, потому что ее нет на Вашей странице.

Он довольно широко освещается в ответах на этот вопрос.