Свойство onerror объекта Window – это особенный обработчик. Если присвоить это_ му свойству функцию, она будет вызываться во всех случаях, когда в окне воз_
14.7. Обработка ошибок
никает ошибка – эта функция становится обработчиком ошибок для данного ок_ на. (Обратите внимание: для тех же целей было бы достаточно определить гло_ бальную функцию onerror(), т. к. это эквивалентно присваиванию функции свойству onerror объекта Window. Однако прием с определением функции oner_ ror() в IE работать не будет.)
Обработчику ошибок передается три аргумента. Первый аргумент – это сообще_ ние, описывающее произошедшую ошибку. Это может быть что_то вроде «отсут_ ствует оператор в выражении», «свойство self доступно только для чтения» или «свойство myname не определено». Второй аргумент – это строка, содержащая URL_адрес документа с JavaScript_кодом, приведшим к ошибке. Третий аргу_ мент – это номер строки в документе, где произошла ошибка. Обработчик оши_ бок может применять эти аргументы для разных целей. Типичный обработчик ошибок может показать сообщение пользователю, записать его в журнал или по_ требовать игнорирования ошибки. До появления JavaScript 1.5 обработчик on_ error() мог использоваться как замена конструкции try/catch (см. главу 6) для обработки исключений.
Помимо этих трех аргументов, важную роль играет значение, возвращаемое об_ работчиком onerror(). Броузеры в случае возникновения ошибки обычно выво_ дят сообщение в диалоговом окне или строке состояния. Если обработчик oner_ ror() возвращает true, это говорит системе о том, что ошибка обработана и ника_ ких дальнейших действий не требуется; другими словами, система не должна выводить собственное сообщение об ошибке.
За последние годы способ обработки JavaScript_кодом ошибок в броузерах изме_ нился. Ранее, когда язык JavaScript еще был в диковинку, а броузеры были со_ всем еще юными, для них было обычным делом выводить диалоговые окна всякий раз, когда в сценарии возникала ошибка. Эти окна несли информацию, полезную для разработчика, но сбивали с толку конечного пользователя. Чтобы уберечь ко_ нечного пользователя от появления подобных диалоговых окон, в окончатель_ ных версиях веб_страниц (многие веб_страницы порождают ошибки в ходе ис_ полнения JavaScript_сценариев, по крайней мере, в некоторых броузерах) мож_ но просто определить обработчик ошибок, который ничего не выводит:
// Не беспокоить пользователя сообщениями об ошибках window.onerror = function() { return true; }
С ростом объемов плохо продуманного и несовместимого JavaScript_кода в Ин_ тернете ошибки стали обычным делом, в результате броузеры стали регистриро_ вать возникающие ошибки ненавязчивым образом. Это улучшило положение конечных пользователей, но усложнило жизнь разработчикам, которым теперь приходится открывать окно JavaScript_консоли (например, в Firefox), чтобы увидеть, возникали ли какие_либо ошибки. Чтобы упростить процесс отладки, можно воспользоваться примерно таким обработчиком ошибок:
// Вывести сообщение об ошибке в виде диалогового окна, но не более 3 раз window.onerror = function(msg, url, line) {