Перейти к содержимому

Обзор ​

Код в колбэке — обработчике 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 }))

Опции ​

ОпцияТипПо умолчаниюОписание
setTimeoutbooleantrueОборачивать колбэки setTimeout
setIntervalbooleantrueОборачивать колбэки setInterval
requestAnimationFramebooleantrueОборачивать колбэки requestAnimationFrame
eventTargetbooleantrueОборачивать слушатели событий на window, document и XMLHttpRequest

Поскольку сообщает GlobalErrorIntegration, эта интеграция ничего не даёт, если ту выключили через disable('global-error').

Если все ваши скрипты отдаются с домена самой страницы или с crossorigin="anonymous" и заголовком Access-Control-Allow-Origin, браузеры никогда не урезают ошибку, и эта интеграция не нужна.