Как отлавливать ВСЕ ошибки JavaScript с помощью window.onerror? (включая додзё) - PullRequest
28 голосов
/ 09 декабря 2011

этот вопрос является продолжением javascript: как отображать ошибки сценария во всплывающем оповещении? , где объяснялось, как отлавливать обычные ошибки 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, используя window.onerror (особенно ошибки додзё)?

Ответы [ 3 ]

14 голосов
/ 29 декабря 2011

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

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

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

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

1 голос
/ 17 января 2012

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

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

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

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

1 голос
/ 08 января 2012

Вы можете написать код, подобный этому:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...