Проблемы с записями сессий

Различные проблемы, мешающие захвату или корректному отображению воспроизведений.

Проблемы с записями сессий

Записи появляются на панели управления через несколько минут (~4 мин) после завершения сессии. Сессия считается завершённой, когда пользователь закрывает вкладку или браузер, отключается (более чем на 2 мин) или превышает 2 часа (в этом случае начинается новая сессия). Каждая вкладка приводит к новой записи, тогда как перезагрузка существующей вкладки не запускает новую.

Этот раздел призван помочь вам устранить распространённые проблемы при воспроизведении сессий.

Воспроизведения не отображаются в списке

Section titled Воспроизведения не отображаются в списке

Прежде чем приступить к отладке записей сессий, убедитесь, что вы захватываете весь трафик. Нажмите кнопку Manage в разделе Sessions и включите Capture All.

Ещё одна распространённая ошибка заключается в двойном запуске трекера, что препятствует записи сессий. Обычно это происходит, когда разработчики переходят от настройки на основе скрипта к использованию npm-пакета, поэтому убедитесь, что у вас используется только один из вариантов.

Проверка установки

Section titled Проверка установки

Если вы не уверены в настройке, откройте инспектор браузера и проверьте вкладку Network, чтобы увидеть, есть ли XHR-запросы (ищите «ingest»), отправляемые на ваш IP/домен (или *.openreplay.com, если вы используете OpenReplay Cloud).

Другой способ — использовать callback запуска трекера и выводить сообщение при старте.

const tracker = new OpenReplay({
	projectKey: PROJECT_KEY,
});

tracker.start().then(({sessionID}) => console.log("OpenReplay tracker started with session: ", sessionID))
// OR you can use startCallback method
tracker.start({
	startCallback: ({ sessionID }) => console.log("OpenReplay tracker started with session: ", sessionID)
});
// for snippet, just add startCallback to initOpts

Тестирование на localhost

Section titled Тестирование на localhost

OpenReplay требуется публичный доступ для копирования некоторых ресурсов вашего приложения (CSS, шрифтов и иконок) для корректного отображения записей. Ваш сайт также должен использовать SSL/HTTPS, иначе трекер не запустится. По этим причинам сессии не будут захватываться на localhost, если только вы не примените это обходное решение.

Сайт не использует HTTPS

Section titled Сайт не использует HTTPS

В целях безопасности трекер работает только на веб-приложениях, использующих SSL (HTTPS). Если ваш сайт работает на HTTP, трекер не запустится.

Если вы видите ошибку, аналогичную приведённой ниже, значит OpenReplay не смог запуститься из-за отсутствия политики безопасности контента. Смотрите здесь политику, которую необходимо добавить.

CSP Issue

OpenReplay заблокирован

Section titled OpenReplay заблокирован

Скрипт записи может быть заблокирован расширением браузера, например блокировщиком рекламы. Используйте инспектор браузера, чтобы проверить, не завершаются ли запросы ошибкой. Если это так, добавьте исключение для домена, на котором установлен backend OpenReplay (или openreplay.com, если вы используете облачное предложение).

Из-за неподдерживаемого браузера

Section titled Из-за неподдерживаемого браузера

OpenReplay генерирует исключение при запуске в неподдерживаемом браузере. Смотрите здесь список поддерживаемых браузеров.

Воспроизведения отображаются некорректно

Section titled Воспроизведения отображаются некорректно

Отсутствуют стили

Section titled Отсутствуют стили

OpenReplay нужен доступ к ресурсам, таким как ваш CSS, чтобы воспроизведения работали. Фактически эти файлы копируются и затем кэшируются нашим backend, чтобы вы могли видеть старые записи, даже если ваше веб-приложение изменилось. Именно поэтому необходимо убедиться, что ваши стили (а также иконки и шрифты) общедоступны. Если ваши ресурсы размещены в домене с ограниченным доступом (приватном или защищённом), OpenReplay не сможет скопировать и использовать их в воспроизведениях. Вы можете скопировать их в общедоступный домен, а затем использовать параметр resourceBaseHref, чтобы указать домен в конструкторе трекера.

Если ваши iFrame того же источника содержат вложенные фреймы, обязательно используйте абсолютный путь (в элементах <link>, указывающих на ваши CSS-файлы) в каждом встроенном фрейме или используйте параметр resourceBaseHref, чтобы указать домен в конструкторе трекера.

Если вы тестируете на localhost, стили не будут отображаться, так как OpenReplay не может получить к ним доступ, поскольку они находятся на вашем компьютере. Следуйте этому руководству, чтобы исправить ситуацию.

В редких случаях воспроизведение может отображаться пустым (или белым). Хотя страницы не будут отрисованы, вы всё равно сможете видеть движение мыши пользователя. Попробуйте установить параметр disableStringDict в значение true и посмотрите, поможет ли это с новыми записями. Обычно это решает проблему.

Если вы используете canvas поверх слоя вашего frontend (с более высоким zIndex), вы можете заметить чёрный экран во время воспроизведения записанных сессий. Это происходит потому, что web API пока не позволяет нам захватывать альфа-канал. Если это касается вашего веб-приложения, добавьте HTML-атрибут data-openreplay-hidden к проблемному элементу canvas, чтобы полностью скрыть его из записи сессии.

Изображения не отображаются

Section titled Изображения не отображаются

В отличие от стилей, изображения не кэшируются OpenReplay, а извлекаются во время воспроизведения сессии. Поэтому они должны быть общедоступными. Если они находятся в CDN, убедитесь, что вы сохраняете старые версии своих изображений, чтобы можно было корректно воспроизводить старые записи сессий.

Если ваше веб-приложение содержит iframe, вы не сможете воспроизводить их содержимое как часть ваших записей. Вы по-прежнему можете запустить OpenReplay внутри iframe, включив tracker.start(), но он будет считаться отдельной вкладкой, что означает, что он будет захвачен в отдельную запись.

Воспроизведения нарушены между поддоменами

Section titled Воспроизведения нарушены между поддоменами

Сайты, распределённые по множеству поддоменов, будут генерировать несколько сессий для одного посещения. Вы можете объединить их в одну запись, передав sessionHash в метод start() трекера. sessionHash можно сохранить, а затем извлечь из вашего межсайтового хранилища (например, cookie).

// Initialize the tracker as you would normally do
import { tracker } from '@openreplay/tracker'

tracker.configure({
  projectKey: PROJECT_KEY
})

// or with class instance:
import OpenReplay from '@openreplay/tracker'

const tracker = new OpenReplay({
	projectKey: PROJECT_KEY
})
...
// Make sure the tracker is stopped when passing subdomains and collect the sessionHash
const sessionHash = tracker.stop(); // This can be saved in cookies or passed through URL (if needed)
...
// Initialize another tracker on the new subdomain with the same projectKey
// then Pass the sessionHash to the newly started session
trackerNewDomain.start({ 
  sessionHash, // This can be retrieved from cookies or URL (if needed)
})

Если продолжить сессию невозможно (она не существует или завершена), трекер автоматически запустит новую.

Воспроизведения неполные

Section titled Воспроизведения неполные

Это можно заметить в воспроизведениях, в которых есть только одна посещённая страница и которые заканчиваются, как только пользователь переходит на другую страницу. Обычно это происходит на веб-сайтах, которые не являются одностраничными приложениями (SPA). Чтобы исправить это, tracker.start() должен вызываться на каждой странице.

Воспроизведения отсутствуют

Section titled Воспроизведения отсутствуют

Если вы не размещаете OpenReplay самостоятельно, а используете наше размещённое решение, есть вероятность, что некоторые сессии не записываются, поскольку запросы к нашим серверам могут быть заблокированы. Обычно это вызвано блокировщиками рекламы, VPN или расширениями браузера.

Если у вас есть какие-либо вопросы об этом процессе, не стесняйтесь обращаться к нам в нашем Slack или загляните на наш форум.