Це правда, що в сучасних браузерах, підключення window.onerror до помилок, що спливають аж до верху, разом із додаванням обробників подій jQuery для помилок Ajax, буде вловлювати практично всі об’єкти Error, вкинуті у ваш код клієнта. Якщо ви вручну налаштовуєте обробник для window.onerror, у сучасних браузерах це робиться за допомогою window.addEventListener('error', callback), тоді як в IE8 / 9 вам потрібно зателефонувати
window.attachEvent('onerror', callback).
Зверніть увагу, що тоді слід врахувати середовище, в якому обробляються ці помилки, та причину цього. Одна справа вловити якомога більше помилок з їхніми стековими трасами, але поява сучасних інструментів розробника F12 вирішує цей варіант використання при локальній реалізації та налагодженні. Точки зупинки тощо нададуть вам більше даних, ніж доступно від обробників, особливо щодо помилок, виданих сторонніми бібліотеками, завантаженими із запитів CORS. Вам потрібно зробити додаткові кроки, щоб доручити браузеру надати ці дані.
Ключовою проблемою є надання цих даних у виробництві, оскільки ваші користувачі гарантовано запускають набагато ширший набір браузерів та версій, ніж ви можете протестувати, і ваш сайт / програма зламається несподіваними способами, незалежно від того, скільки контролю якості ви кидаєте це.
Щоб вирішити це, вам потрібен робочий відстежувач помилок, який фіксує кожну помилку, видану браузерами вашого користувача, оскільки вони використовують ваш код, і відправляє їх до кінцевої точки, де ви можете переглядати дані та використовувати їх для виправлення помилок, коли вони трапляються . У Raygun (відмова від відповідальності: я працюю в Raygun) ми доклали багато зусиль, щоб забезпечити для цього чудовий досвід, оскільки є багато підводних каменів та проблем, які слід врахувати, оскільки наївна реалізація буде упущена.
Наприклад, є ймовірність того, що ви об’єднаєте та зменшите свої JS-ресурси, а це означає, що помилки, викинуті із мініфікованого коду, матимуть сміттєві стеки зі спотвореними іменами змінних. Для цього вам потрібен ваш інструмент побудови для створення вихідних карт (ми рекомендуємо UglifyJS2 для цієї частини конвеєра), а ваш відстежувач помилок повинен приймати та обробляти їх, перетворюючи зіпсовані стеки назад у зручні для читання. Raygun робить все це нестандартно і включає кінцеву точку API для прийняття вихідних карт, оскільки вони створюються вашим процесом збірки. Це є ключовим фактором, оскільки їх потрібно залишати загальнодоступними, інакше будь-хто міг би видалити ваш код, заперечуючи його призначення.
Raygun4js клієнтська бібліотека також поставляється з window.onerrorдля сучасних і застарілих браузерів, а також JQuery перехоплює поза коробки, так щоб встановити це вам потрібно тільки додати:
<script type="text/javascript" src="//cdn.raygun.io/raygun4js/raygun.min.js" </script>
<script>
Raygun.init('yourApiKey').attach();
</script>
Також є вбудована функціональність, включаючи можливість змінити корисне навантаження помилки перед її відправленням, додавши теги та власні дані, метадані про користувача, який побачив помилку. Це також позбавляє від отримання хороших слідів стека з вищезазначених сторонніх сценаріїв CORS, що вирішує страшну "Помилку сценарію" (яка не містить жодного повідомлення про помилку та трасування стека).
Більш важливим питанням є те, що через величезну аудиторію в Інтернеті ваш сайт генеруватиме багато тисяч повторюваних випадків кожної помилки. Сервіс відстеження помилок, такий як Raygun, має розумність об’єднати їх у групи помилок, щоб ви не потонули в потоці сповіщень, і дозволяє побачити кожну фактичну помилку, готову до виправлення.