Я пытаюсь регистрировать ошибки на устройствах, на которых нет встроенной консоли javascript (например, мобильной). В процессе я пытался зафиксировать ошибки, используя window.addEventListener('error', (event)=>{...}).

В Firefox запись event.error предоставляет доступ к полной информации об ошибке. Однако в Chrome event.error всегда null. Аналогично, эквивалентный объект ошибки, который передается в качестве window.onerror в качестве одного из аргументов, присутствует в Firefox, но отсутствует в Chrome.

Это ожидаемое поведение? Есть ли надежный кросс-браузерный метод доступа к информации о трассировке?

Примере

Выполнить в консоли, например на этом сайте.

window.addEventListener('error', (err) => {
    for(const key in err) {
        console.log(key,'=',err[key]);
    }
});
// Chrome doesn't capture errors produced directly in the console,
// so we use a timeout.
window.setTimeout(()=>{ noSuchVariable; }, 100)

Я получаю:

VM5685:3 isTrusted = true
VM5685:3 message = Script error.
VM5685:3 filename = 
VM5685:3 lineno = 0
VM5685:3 colno = 0
VM5685:3 error = null
...

Тот же результат я получаю в приватном режиме, т.е. он не связан с расширениями.

Firefox дает гораздо более полезный результат:

sTrusted = true debugger eval code:3:17
message = ReferenceError: noSuchVariable is not defined debugger eval code:3:17
filename = debugger eval code debugger eval code:3:17
lineno = 8 debugger eval code:3:17
colno = 25 debugger eval code:3:17
error = ReferenceError: "noSuchVariable is not defined"
    <anonymous> debugger eval code:8
0
kdb 21 Дек 2019 в 02:14

1 ответ

Лучший ответ

Как указано в CertainPerformance, проблема было вызвано использованием консоли разработчика Chrome, которая мешает обработке ошибок.

Однако данные об ошибке выдаются правильно, если ошибка возникает внутри таймера или внутри сценария, выполняемого путем ввода URL-адреса javascript:.

0
kdb 23 Дек 2019 в 11:30