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", // when dealing with the self-hosted version of OpenReplay
})
tracker.start() // returns a promise with session info (sessionID, sessionHash, userUUID)
В качестве альтернативы вы можете создать новый экземпляр класса:
import OpenReplay from '@openreplay/tracker';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY
});
tracker.start(); // returns a promise with session info (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,
ingestPoint: "https://openreplay.mydomain.com/ingest", // when dealing with the self-hosted version of OpenReplay
});
//...
function MyApp() {
useEffect(() => { // use componentDidMount in case of React Class Component
tracker.start(); // returns a promise with session info (sessionID, sessionHash, userUUID)
}, [])
}
Пример
Section titled Примерimport OpenReplay from '@openreplay/tracker/cjs';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY,
ingestPoint: "https://openreplay.mydomain.com/ingest", // when dealing with the self-hosted version of OpenReplay
capturePerformance: true,
__DISABLE_SECURE_MODE: true // for local testing
});
Параметры инициализации
Section titled Параметры инициализацииСуществует набор параметров, которые можно передать конструктору. Обязательным является только projectKey.
Общего назначения
Section titled Общего назначенияprojectKey: stringИдентификатор проекта, который вы отслеживаете.sessionHash?: stringХеш начальной сессии. Это полезно, когда сессии проходят через разные субдомены вашего веб-приложения, но вы хотите объединить их в одну запись. Если продолжить сессию невозможно (она не существует или завершена), трекер автоматически начнёт новую. Это значение также возвращается при вызовеstop(). Подробнее об этом здесь.ingestPoint?: stringВаш домен OpenReplay (то есть https://openreplay.mydomain.com/ingest), на который трекер будет отправлять события. Этот параметр необязателен для пользователей OpenReplay Cloud. По умолчанию:https://api.openreplay.com/ingest(который указывает на OpenReplay Cloud).revID?: stringИдентификатор ревизии вашего веб-приложения. Полезно при поиске проблем, возникающих в конкретной версии релиза.resourceBaseHref?: stringУказывает на публично доступный домен, с которого OpenReplay может загружать ресурсы (стили, шрифты и значки). Поскольку они необходимы для корректного воспроизведения сессии, этот параметр полезен для обхода ограничения, связанного с размещением вашего сайта (и, следовательно, ресурсов) в частном домене. Пример:https://mypublicsite.com/assets/.captureIFrames?: booleanДля захвата всех iFrame того же домена в вашем веб-приложении. Если вы хотите отслеживать конкретный iFrame, просто добавьте HTML-атрибутdata-openreplay-captureк тегу<iframe>. По умолчанию:true.disableClickmaps?: booleanДля отключения вычисления CSS-селекторов (используемых в картах кликов). По умолчанию: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 Таблицы стилейinlineCss: number: Принудительно заставляет трекер записывать и отправлять удалённые таблицы стилей как обычные сообщения вместо их кэширования на бэкенде. Это полезно, когда CSS-файлы являются приватными и поэтому не могут быть кэшированы бэкендом OpenReplay. Возможные значения:0: CSS-файл кэшируется бэкендом. Поведение по умолчанию.1: Попытается записать связанный css-файл как объект AdoptedStyleSheet.2: Загрузит файл, а затем смоделирует поведение AdoptedStyleSheets для воспроизведения.3: Загрузит файл, а затем сохранит его как обычный css внутри узла<style>— используйте этот вариант, если в ваших CSS-файлах много сокращённых свойств (покрывает ошибку спецификации CSSOM).
css: CssRulesOptions: Обеспечивает лучшую поддержку приложений, созданных с использованием библиотеки emotion-js (то есть компонентов MUI). Имеет приведённые ниже параметры:scanInMemoryCSS: boolean: Включите это, если у вас возникают проблемы со стилями, созданными emotionjs. По умолчанию:false.checkCssInterval: number: Как часто сканировать отслеживаемые таблицы стилей с пустыми правилами. По умолчанию:200(мс).checkLimit: number: Полезно в случаях с ограниченным количеством мутаций и/или когда таблицы стилей гидратируются на клиенте после первоначального рендеринга. Применяется к каждой таблице стилей по отдельности. Значение должно быть = X/checkCssInterval, где X — длительность наблюдения в мс. По умолчанию:0(отключено).
Конфиденциальность
Section titled КонфиденциальностьrespectDoNotTrack?: booleanНе запускать трекер, если в браузере пользователя включён флаг do-not-track. По умолчанию:false.obscureTextEmails?: booleanСкрывает адреса электронной почты в текстовых элементах. Адреса электронной почты будут преобразованы в случайную цепочку звёздочек. По умолчанию:true.obscureTextNumbers?: booleanСкрывает числа в текстовых элементах. Числа будут преобразованы в случайную цепочку звёздочек. По умолчанию:false.obscureInputEmails?: booleanСкрывает адреса электронной почты в полях ввода. Значения электронной почты будут преобразованы в случайную цепочку звёздочек. По умолчанию:true.obscureInputNumbers?: booleanСкрывает числа в полях ввода. Числовые значения будут преобразованы в случайную цепочку звёздочек. Если эта опция отключена, обязательно очищайте поля ввода, которые могут содержать конфиденциальные данные, такие как почтовые индексы или реквизиты кредитной карты. По умолчанию:true.obscureInputDates?: booleanСкрывает даты в полях ввода. Значения дат будут преобразованы в случайную цепочку звёздочек. По умолчанию:false.defaultInputMode?: 0 | 1 | 2Режим захвата по умолчанию для значений ввода. Соответственно: обычный, скрытый или игнорируемый. По умолчанию:2(игнорируемый).urls: Позволяет настроить способ записи событий местоположения страницы с помощью следующих параметров:urlSanitizer?: (url: string) => stringПозволяет очистить url страницы (например, для удаления токенов использования).titleSanitizer?: (title: string) => stringПозволяет очистить заголовок страницы.
resourceNameSanitizer?: (url: string) => stringПозволяет очистить URL для записанных сетевых ресурсов.
Обратите внимание, что исключённые данные скрываются или подавляются до отправки данных на серверы OpenReplay. Изменения, применённые к указанным выше параметрам, не могут иметь обратной силы и будут применяться только к вновь собираемым данным. Подробнее см. в разделе Sanitize Data.
Консоль
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Для захвата метрик производительности, таких как частота кадров, потребление ЦП и памяти. По умолчанию:true.longTasks?: booleanДля захвата событий long-animation-frame. По умолчанию:false.
Параметр network относится к захвату сетевых запросов и полезных нагрузок для fetch и XHR.
network?: {
failuresOnly: boolean;
sessionTokenHeader: string;
ignoreHeaders: Array<string> | boolean;
capturePayload: boolean; // make sure you sanitize your data before enabling it
sanitizer: (RequestResponseData) => RequestResponseData | null;
captureInIframes: boolean;
axiosInstances: AxiosInstance[];
useProxy?: boolean;
tokenUrlMatcher?: (url: string) => boolean;
}
См. Network Options для примеров и дополнительных сведений о том, как скрывать конфиденциальные данные.
Canvas
Section titled CanvasПараметр canvas относится к захвату элементов canvas/WebGL:
canvas?: {
disableCanvas?: boolean
fixedCanvasScaling?: boolean
useAnimationFrame?: boolean
fileExt?: 'webp' | 'png' | 'jpeg' | 'avif'
}
См. Canvas and WebGL, чтобы узнать, как включить эту возможность, и получить дополнительные сведения о доступных параметрах.
Межсайтовые iFrame
Section titled Межсайтовые iFrameПараметр crossdomain относится к захвату iFrame с разных доменов. Он используется вместе с параметром captureIFrames, который должен быть установлен в true.
crossdomain?: {
/**
* Enable cross-domain tracking
* @default false
* */
enabled?: boolean
/**
* Used to specify the parent domain, will be '*' by default
* (Check your CSP settings)
* @default '*'
* */
parentDomain?: string
}
Начиная с версии Tracker 14.0.10, атрибут data-domain больше не требуется на HTML-элементах при работе с межсайтовыми iFrame.
См. Cross-domain iFrame Tracking для получения дополнительных сведений о том, как захватить 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 Безопасность__DISABLE_SECURE_MODE?: booleanДля разрешения небезопасного соединения между трекером и бэкендом на сайтах без SSL. Это следует использовать только в целях разработки. По умолчанию:false.