JavaScript SDK - Инициализация SDK
Установка
Section titled УстановкаСледующая команда установит трекер и вместе с ним SDK, чтобы вы могли воспользоваться всеми возможностями трекера.
npm i @openreplay/tracker
Инициализация
Section titled ИнициализацияПри создании экземпляра трекера OpenReplay вы можете указать несколько параметров конфигурации для настройки различных аспектов записи и работы с записями.
Вы должны установить опцию projectKey в конструкторе. Вы можете получить это значение из вашей панели управления OpenReplay в разделе ‘Preferences > Projects’.
Одностраничные приложения (SPA)
Section titled Одностраничные приложения (SPA)Если ваш веб-сайт является Одностраничным приложением (SPA), используйте следующий код:
import { tracker } from '@openreplay/tracker'
tracker.configure({
projectKey: PROJECT_KEY,
ingestPoint: "https://openreplay.mydomain.com/ingest", // при использовании самоуправляемой версии
})
tracker.start() // возвращает промис с информацией о сессии (sessionID, sessionHash, userUUID)
Серверный рендеринг (SSR)
Section titled Серверный рендеринг (SSR)Если ваше веб-приложение использует Серверный рендеринг (SSR) (например, NextJS, NuxtJS), используйте следующий код. Убедитесь, что tracker.start() вызывается после запуска приложения (в useEffect или componentDidMount).
import OpenReplay from '@openreplay/tracker/cjs';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY,
});
//...
function MyApp() {
useEffect(() => { // используйте componentDidMount в случае классового компонента React
tracker.start(); // возвращает промис с информацией о сессии (sessionID, sessionHash, userUUID)
}, [])
}
Пример
Section titled Примерimport OpenReplay from '@openreplay/tracker/cjs';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY,
ingestPoint: "https://openreplay.mydomain.com/ingest", // при использовании самоуправляемой версии OpenReplay
capturePerformance: true,
__DISABLE_SECURE_MODE: true // для локального тестирования
});
Параметры инициализации
Section titled Параметры инициализацииСуществует набор опций, которые вы можете передать в конструктор. Только projectKey является обязательным.
Общие настройки
Section titled Общие настройкиprojectKey: stringID проекта, который вы отслеживаете.sessionHash?: stringХэш начальной сессии. Это полезно, когда сессии переходят через разные поддомены в вашем веб-приложении, но вы хотите объединить их в одну запись. В случае, если продолжить сессию невозможно (не существует или завершена), трекер автоматически начнет новую. Он также возвращается при вызовеstop(). Подробнее об этом здесь.ingestPoint?: stringВаш домен OpenReplay (например, https://openreplay.mydomain.com/ingest), на который трекер будет отправлять события. Это необязательно для пользователей OpenReplay Cloud. По умолчанию:https://api.openreplay.com/ingest(указывает на OpenReplay Cloud).revID?: stringID ревизии вашего веб-приложения. Полезно при поиске проблем, происходящих в определенной версии.resourceBaseHref?: stringСсылается на общедоступный домен, где OpenReplay может получить доступ к ресурсам (стили, шрифты и иконки). Поскольку они необходимы для корректного воспроизведения сессии, эта опция полезна для обхода ограничения размещения вашего сайта (и, следовательно, ресурсов) в приватном домене. Пример:https://mypublicsite.com/assets/.captureIFrames?: booleanДля захвата всех iframe того же домена в вашем веб-приложении. Если вы хотите отслеживать определенный iframe, просто добавьте HTML-атрибутdata-openreplay-captureк тегу<iframe>. По умолчанию:true.disableClickmaps?: booleanДля отключения вычисления CSS-селекторов (используется в Clickmaps). По умолчанию:false.__debug__: numberДля включения логов отладки. По умолчанию:0(выключено).2: Ошибки.3: Ошибки и предупреждения.4: Ошибки, предупреждения и логи.5: Подробно.
autoResetOnWindowOpen?: booleanВключите эту опцию, чтобы сбросить sessionID при открытии новой вкладки из вашего приложения. Это переопределяет методwindow.open, чтобы избежать дублирования sessionID из-за общего хранения сессии между вкладками браузера. По умолчанию:false.forceSingleTab: booleanОтключает возможность записи в нескольких вкладках, которая объединяет пользовательские сессии, проведенные в нескольких вкладках, в одно воспроизведение. Вместо этого, при включении этой опции, сессии, захваченные в разных вкладках браузера, будут записаны в отдельные записи. По умолчанию:false.disableStringDict: booleanОтключает логику словаря строк (для оптимизации хранения) в записях. По умолчанию:false.fixedCanvasScaling: booleanЗаставляет изображения canvas рендериться с плотностью пикселей 1 вместо devicePixelRatio (снижает потенциальное качество изображения, чтобы итоговый результат был меньше по размеру). По умолчанию:false.disableCanvas?: booleanОтключает запись элементов canvas. По умолчанию:false.assistSocketHost?: stringМожет быть использован для установки определенного хоста для подключения плагина Assist. По умолчанию использует значениеingestPoint.nodes?: { maintainer: MaintainerOptions }Новая опцияnodes.maintainerпомогает управлять памятью и очищать DOM-узлы, которые больше не используются. Имеет следующие параметры:interval: number: Интервал времени (в миллисекундах) между запусками очистки. По умолчанию: 30 * 1000 (30 секунд).batchSize: number: Количество узлов для проверки во время каждого запуска очистки. По умолчанию: 2500.enabled: boolean: Включение или отключение обслуживания узлов. По умолчанию: true.
Пример
Section titled Пример
import { tracker } from '@openreplay/tracker';
tracker.configure({
projectKey: 'your_project_key',
ingestPoint: "https://openreplay.mydomain.com/ingest", // при использовании самоуправляемой версии
nodes: {
maintainer: {
interval: 60 * 1000, // Запускать очистку каждую минуту
batchSize: 2500, // Проверять узлы партиями по 2500
enabled: true, // Включить обслуживание узлов
}
}
});
Конфиденциальность
Section titled КонфиденциальностьrespectDoNotTrack?: booleanНе запускать трекер, если в браузере пользователя включен флаг do-not-track. По умолчанию:false.obscureTextEmails?: booleanСкрывает электронные почты в текстовых элементах. Электронные почты будут заменены случайной цепочкой звездочек. По умолчанию:true.obscureTextNumbers?: booleanСкрывает числа в текстовых элементах. Числа будут заменены случайной цепочкой звездочек. По умолчанию:false.obscureInputEmails?: booleanСкрывает электронные почты в полях ввода. Значения электронной почты будут заменены случайной цепочкой звездочек. По умолчанию:true.obscureInputNumbers?: booleanСкрывает числа в полях ввода. Числовые значения будут заменены случайной цепочкой звездочек. По умолчанию:false.obscureInputDates?: booleanСкрывает даты в полях ввода. Значения дат будут заменены случайной цепочкой звездочек. По умолчанию:false.defaultInputMode?: 0 | 1 | 2Режим захвата по умолчанию для значений ввода. Соответственно: обычный, скрытый или игнорируемый. По умолчанию:1(скрытый).
Обратите внимание, что исключенные данные скрываются или подавляются перед отправкой на серверы OpenReplay. Изменения, примененные к вышеуказанным опциям, не могут быть ретроактивными и будут применяться только к вновь собранным данным. См. Очистка данных для получения более подробной информации.
Таблицы стилей
Section titled Таблицы стилейinlineCss: number: заставляет трекер записывать и отправлять удалённые CSS-файлы как обычные сообщения вместо кэширования их на сервере.0: Поведение по умолчанию (кэшируется).1: Попытаться записать файл как объектAdoptedStyleSheet.2: Сначала получить файл, затем смоделировать поведениеAdoptedStyleSheetsпри воспроизведении.3: Получить файл и сохранить его как обычный CSS внутри<style>— полезно при большом количестве сокращённых свойств.
css: CssRulesOptions: улучшенная поддержка приложений на emotion-js (например, компонентов MUI).scanInMemoryCSS: boolean: включите, если есть проблемы со стилями emotionjs. По умолчаниюfalse.checkCssInterval: number: интервал (мс) для сканирования отслеживаемых таблиц стилей с пустыми правилами. По умолчанию200.checkLimit: number: лимит сканирований для каждой таблицы. По умолчанию0(отключено).
Консоль
Section titled КонсольconsoleMethods?: Array<'log' | 'info' | 'warn' | 'error' 'debug' | 'assert'> | nullУказывает список методов консоли для захвата. По умолчанию:['log', 'info', 'warn', 'error', 'debug', 'assert']consoleThrottling?: numberМаксимальное количество записей консоли, захватываемых в секунду. По умолчанию:30.
Исключения
Section titled ИсключенияcaptureExceptions?: booleanЗахватывает исключения JavaScript и трассировки стека. По умолчанию:true.
Тайминги
Section titled ТаймингиcaptureResourceTimings?: booleanЗаписывает тайминги ресурсов. По умолчанию:true.capturePageLoadTimings?: booleanЗаписывает тайминги загрузки страницы. По умолчанию:true.capturePageRenderTimings?: booleanВычисляет метрики рендеринга страницы, такие как Speed Index, Visually Complete или Time To Interactive. ТребуетcaptureResourceTimings = true. По умолчанию:true.
Производительность
Section titled ПроизводительностьcapturePerformance?: booleanДля захвата метрик производительности, таких как частота кадров, использование CPU и памяти. По умолчанию:true.longTasks?: booleanДля захвата событий long-task. По умолчанию:false.
Опция network относится к захвату сетевых запросов и полезной нагрузки для fetch и XHR.
network?: {
failuresOnly: boolean;
sessionTokenHeader: string;
ignoreHeaders: Array<string> | boolean;
capturePayload: boolean; // убедитесь, что вы очистили ваши данные перед включением этого
sanitizer: (RequestResponseData) => RequestResponseData | null;
captureInIframes: boolean;
axiosInstances: AxiosInstance[];
useProxy?: boolean;
tokenUrlMatcher?: (url: string) => boolean;
}
См. Сетевые опции для примеров и более подробной информации о том, как редактировать конфиденциальные данные.
Canvas
Section titled CanvasОпция canvas относится к захвату элементов canvas/WebGL:
canvas?: {
disableCanvas?: boolean
fixedCanvasScaling?: boolean
useAnimationFrame?: boolean
fileExt?: 'webp' | 'png' | 'jpeg' | 'avif'
}
См. Canvas и WebGL для того, чтобы узнать, как включить эту функцию и получить более подробную информацию о доступных опциях.
Кросс-доменные iFrame
Section titled Кросс-доменные iFrameОпция crossdomain относится к захвату iFrame с разных доменов. Используется в сочетании с опцией captureIFrames, которая должна быть установлена в true.
crossdomain?: {
/**
* Включить кросс-доменное отслеживание
* @default false
* */
enabled?: boolean
/**
* Используется для указания родительского домена, по умолчанию '*'
* (Проверьте настройки CSP)
* @default '*'
* */
parentDomain?: string
}
Начиная с версии трекера 14.0.10, атрибут data-domain больше не требуется на HTML-элементах при работе с кросс-доменными iFrame.
См. Отслеживание кросс-доменных iFrame для получения более подробной информации о том, как захватить iFrame с другого домена.
Курсор мыши
Section titled Курсор мышиОпция mouse относится к захвату селекторов для кликов с целью построения карт кликов.
mouse?:
{
disableClickmaps?: boolean
minSelectorDepth?: number
nthThreshold?: number
maxOptimiseTries?: number
}
disableClickmaps?: booleanПолностью отключает вычисление селекторов. По умолчанию:false.minSelectorDepth?: numberМинимальная длина оптимизированного селектора (по умолчанию 2). Пример:body > div > div > p => body > pnthThreshold?: numberКоличество попыток селектора перед использованием селекторов nth-child. Это дорогостоящая операция и может привести к значительной нагрузке, не устанавливайте выше 2000. По умолчанию:1000.maxOptimiseTries?: numberКоличество попыток оптимизировать и сократить селектор. По умолчанию:10 000.
Повторные подключения
Section titled Повторные подключенияconnAttemptCount?: numberМаксимальное количество повторных попыток, когда HTTP-запросы трекера не достигают бэкенда. По умолчанию:10.connAttemptGap?: numberДлительность между каждой повторной попыткой (в миллисекундах). По умолчанию:8000.
Флаги функций
Section titled Флаги функцийonFlagsLoadколбэк, используемый для выполнения действия после загрузки флагов функций (каждый раз).
flags?: {
onFlagsLoad?: (flags: IFeatureFlag[]) => void
}
// ...
interface IFeatureFlag {
key: string
is_persist: boolean
value: string | boolean
payload: string
}
Безопасность
Section titled Безопасность__DISABLE_SECURE_MODE?: booleanДля разрешения небезопасного соединения между трекером и бэкендом на сайтах без SSL. Это следует использовать только в целях разработки. По умолчанию:false.