Я не могу понять, почему прототип подавляет сообщения об ошибках в событии dom:loaded
и в обработчиках AJAX.
Учитывая следующий фрагмент HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Conforming XHTML 1.1 Template</title>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
document.observe('dom:loaded', function() {
console.log('domready');
console.log(idontexist);
});
</script>
</head>
<body>
</body>
</html>
Событие domready происходит, я вижу журнал в консоли, но нет никаких признаков каких-либо ошибок. Если вы переместите строку console.log(idontexist);
из обработчика, вы получите
idontexist не определен
ошибка в консоли.
Я нахожу это немного странным, что в других обработчиках событий, таких как «щелчок», вы получаете сообщение об ошибке, кажется, что только dom:loaded
имеет эту проблему.
То же самое относится и к обработчикам AJAX:
new Ajax.Request('/', {
method: 'get',
onComplete: function(r) {
console.log('xhr complete');
alert(youwontseeme);
}
});
Вы не увидите никаких ошибок.
Это с prototype.js 1.6.1, и я не могу найти ни указания на это поведение в документации, ни способа включить отчеты об ошибках в этих обработчиках.
Я попытался пройти по коду с помощью отладчика FireBug, и, похоже, он переходит к функции в строке 53 с именем K, когда он сталкивается с отсутствующей переменной в обработчике dom:loaded
:
K: function(x) { return x }
Но как? Зачем? Когда? Я не вижу там ни одного блока try / catch, как заканчивается поток программы?
Я знаю, что могу сделать ошибки видимыми, упаковав свой обработчик (и) dom:ready
в блоки try / catch, но это не очень удобный вариант. То же самое касается регистрации глобального обработчика onException для вызовов AJAX.
Почему это даже подавляет ошибки? Кто-нибудь сталкивался с этим раньше?