Ответ 1
По историческим причинам эти window.onerror
- это особый случай. Большинство из них больше не работают, я думаю, что вам нужно вернуться в IE8, чтобы найти браузер, который нуждался в них. Примерно десять лет назад IE6 был королем, и у него вообще не было поддержки addEventListener
, а многие события поддерживались только некоторыми браузерами или имели разные имена. Раньше веб-разработка была крайне противоречивой, и нередко находили старые методы, такие как window.onerror
.
Из-за обратной совместимости window.onerror
немного странный, так как два способа подписки на событие принимают разные аргументы.
Таким образом, устаревшая onerror
включает в себя параметры ошибок в качестве параметров:
window.onerror = function(message, source, line, col, error) {
...
return true; // This will prevent further event propagation
};
Это все еще так, что старый JS, который уже существует, не сломается - дизайнеры браузеров хотят, чтобы десятилетние веб-сайты в основном работали в своих последних версиях.
В то время как прослушиватель событий (в настоящее время рекомендуется) имеет их как свойства для события:
window.addEventListener('error', e => {
// Get the error properties from the error event object
const { message, source, lineno, colno, error } = e;
});
Последнее намного лучше, так как вам не нужно получать никаких предыдущих слушателей, и никакие последующие слушатели (скажем, из расширений браузера) не будут случайно прерывать ваши. Также вы можете удалить своего слушателя, если вы создаете что-то вроде SPA, где вы остаетесь на одной странице с одним контекстом window
.
Итак, чтобы ответить на вопрос:
Большинство документации/постов в блогах/и т.д., которые я могу найти в Интернете, рекомендует делать что-то подобное. Почему они не рекомендуют добавлять обработчик событий для события error?
Потому что они устарели. Поддерживать документацию в актуальном состоянии сложно, и JS быстро движется. Описанный вами шаблон window.onerror
прежнему является приемлемым компромиссом в некоторых корпоративных средах, где необходимо поддерживать крайне устаревшие версии IE. Для подавляющего большинства веб- addEventListener
метод addEventListener
намного лучше.
см., например, явное отсутствие поддержки JQuery (найдите на этой странице "onerror")
JQuery старый. Есть некоторые решения, которые были приняты в 2006-2008 гг. Или около того, что теперь они застряли навсегда, и некоторые предположения, которые .on
делает в отношении событий, являются одним из таких. jQuery .on
был великолепен в 2006 году, потому что нам не нужно было беспокоиться о реализации событий в разных браузерах - он мог скрыть их всех за общим интерфейсом. Теперь все использует addEventListener
поэтому он вам не нужен (и он намного мощнее, чем .on
).