Как уловить ВСЕ ошибки 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)?
Ответы
Ответ 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, похоже, использует это.