Обзор
Код в колбэке — обработчике setTimeout, кадре анимации, слушателе клика — выполняется вне любых try/catch вашего приложения. Когда он бросает исключение, ошибка доходит только до глобального обработчика error, а для скриптов с другого домена (CDN) браузеры сводят её к голому Script error. без сообщения и стека.
browserApiErrorsIntegration оборачивает эти колбэки в месте вызова и сохраняет исходную ошибку с полным стеком до того, как браузер её урежет. Затем ошибка пробрасывается дальше, так что ваше приложение, DevTools и другие обработчики видят ровно то же поведение, что и раньше.
Сама она ни о чём не сообщает. Проброшенная ошибка как обычно доходит до GlobalErrorIntegration; если браузер передал ошибку целой, сообщается именно она, и только если она урезана до Script error., GlobalErrorIntegration сообщает о сохранённой здесь исходной. Каждая ошибка отправляется ровно один раз — DedupeIntegration не нужна.
Она оборачивает:
- колбэки
setTimeoutиsetInterval; - колбэки
requestAnimationFrame; - слушатели
addEventListenerнаwindow,documentиXMLHttpRequest(removeEventListenerпродолжает работать с исходной функцией).
Использование
ts
import { use } from '@buglapse/browser'
import { browserApiErrorsIntegration } from '@buglapse/browser/integrations'
use(browserApiErrorsIntegration())
// или без части обёрток:
use(browserApiErrorsIntegration({ requestAnimationFrame: false }))Опции
| Опция | Тип | По умолчанию | Описание |
|---|---|---|---|
setTimeout | boolean | true | Оборачивать колбэки setTimeout |
setInterval | boolean | true | Оборачивать колбэки setInterval |
requestAnimationFrame | boolean | true | Оборачивать колбэки requestAnimationFrame |
eventTarget | boolean | true | Оборачивать слушатели событий на window, document и XMLHttpRequest |
Поскольку сообщает GlobalErrorIntegration, эта интеграция ничего не даёт, если ту выключили через disable('global-error').
Если все ваши скрипты отдаются с домена самой страницы или с crossorigin="anonymous" и заголовком Access-Control-Allow-Origin, браузеры никогда не урезают ошибку, и эта интеграция не нужна.