Подтвердить что ты не робот

Как уловить ВСЕ ошибки javascript с помощью window.onerror? (включая dojo)

этот вопрос является продолжением javascript: как отображать ошибки script во всплывающем оповещении?, где было объяснено, как улавливать обычные ошибки JavaScript, используя

<script type="text/javascript">
    window.onerror = function(msg, url, linenumber) {
        alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber);
        return true;
    }
</script>

Я попробовал и обнаружил, что dojo erros, как этот:

TypeError: this.canvas is undefined         dojo.js (Row 446)

не сообщалось с использованием этого метода, что приводит меня к моему вопросу:

Как я могу сообщить об ошибках javascript all, используя window.onerror (особенно ошибки dojo)?

4b9b3361

Ответ 1

Может быть, Dojo использует правильные методы обработки ошибок (т.е. блоки try-catch), которые предотвращают появление пузырьков и попадание в контейнер окна, на котором вы зарегистрировали обработчик ошибок.

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

Как отмечалось в комментариях, вы также можете использовать API-интерфейсы отладки, такие как крюк Venkman, и сделать break-on-error - решение, которое обычно работает только для привилегированного кода (благодаря @Sam Hanes).

Вы также можете сделать On(require, 'error', function () {});, чтобы добавить обработку ошибок на Dojo асинхронном загрузчике script - еще один пункт, упомянутый в комментариях @buggedcom

Ответ 2

вы можете написать такой код:

var goErrHandler=window.onerror;
goErrHandler= function(msg, url, linenumber) {
console.log('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber);
return true;
}

goErrHandler();

поэтому в консоли вы увидите что-то вроде этого:

Error message: undefined
URL: undefined 
Line Number: undefined

Ответ 3

Лучшее решение - использовать try/catch, например.

try{
    if(a=='a'){

    }
}catch(e){
    alert(e);
    //or send to server
    new Image().src='errorReport.php?e='+e;
}

Google Plus, похоже, использует это.