JavaScript SDK - SDK initialisieren
Installation
Section titled InstallationMit der folgenden Zeile installieren Sie den Tracker und damit auch das SDK, sodass Sie alle Funktionen des Trackers nutzen können.
npm i @openreplay/tracker
Initialisierung
Section titled InitialisierungBeim Instanziieren des OpenReplay-Trackers stehen Ihnen verschiedene Konfigurationsoptionen zur Verfügung, mit denen Sie viele Aspekte der Aufzeichnung und des Aufzeichnungserlebnisses anpassen können.
Sie müssen die Option projectKey im Konstruktor festlegen. Diesen Wert finden Sie in Ihrem OpenReplay-Dashboard unter ‘Preferences > Projects’.
Single Page Applications (SPA)
Section titled Single Page Applications (SPA)Wenn Ihre Website eine Single Page Application (SPA) ist, können Sie den Tracker als Singleton verwenden:
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)
Alternativ können Sie eine neue Klasseninstanz erstellen:
import OpenReplay from '@openreplay/tracker';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY
});
tracker.start(); // returns a promise with session info (sessionID, sessionHash, userUUID)
Server-side Rendered (SSR)
Section titled Server-side Rendered (SSR)Wenn Ihre Web-App dagegen Server-Side-Rendered (SSR) ist (z. B. NextJS, NuxtJS), verwenden Sie das folgende Snippet.
Stellen Sie sicher, dass tracker.start() aufgerufen wird, sobald die App gestartet ist (in useEffect oder 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)
}, [])
}
Beispiel
Section titled Beispielimport 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
});
Initialisierungsoptionen
Section titled InitialisierungsoptionenSie können dem Konstruktor eine Reihe von Optionen übergeben. Nur projectKey ist erforderlich.
Allgemeines
Section titled AllgemeinesprojectKey: stringDie ID des Projekts, das Sie tracken.sessionHash?: stringDer Hash der ursprünglichen Sitzung. Das ist nützlich, wenn Sitzungen mehrere Subdomains Ihrer Web-App durchlaufen, Sie diese aber zu einer einzigen Aufzeichnung zusammenführen möchten. Falls die Sitzung nicht fortgesetzt werden kann (sie existiert nicht oder ist beendet), startet der Tracker automatisch eine neue. Der Wert wird außerdem vonstop()zurückgegeben. Mehr dazu finden Sie hier.ingestPoint?: stringIhre OpenReplay-Domain (z. B. https://openreplay.mydomain.com/ingest), an die der Tracker Ereignisse sendet. Für OpenReplay-Cloud-Nutzer ist die Option optional. Standard:https://api.openreplay.com/ingest(verweist auf OpenReplay Cloud).revID?: stringDie Revisions-ID Ihrer Web-App. Nützlich, um nach Problemen zu suchen, die in einer bestimmten Release-Version auftreten.resourceBaseHref?: stringVerweist auf die öffentlich erreichbare Domain, von der OpenReplay Assets (Stylesheets, Schriftarten und Icons) abrufen kann. Da diese für ein korrektes Session Replay erforderlich sind, hilft diese Option, die Einschränkung zu umgehen, dass Ihre Website (und damit die Assets) in einer privaten Domain gehostet wird. Beispiel:https://mypublicsite.com/assets/.captureIFrames?: booleanZum Erfassen aller iFrames derselben Domain in Ihrer Web-App. Wenn Sie stattdessen nur einen bestimmten iFrame tracken möchten, fügen Sie dem<iframe>-Tag einfach das HTML-Attributdata-openreplay-capturehinzu. Standard:true.disableClickmaps?: booleanZum Deaktivieren der CSS-Selektor-Berechnung (wird für Click Maps verwendet). Standard:false.__debug__: numberZum Aktivieren von Debug-Logs. Standard:0(deaktiviert).2: Fehler.3: Fehler und Warnungen.4: Fehler, Warnungen und Logs.5: Ausführlich.
autoResetOnWindowOpen?: booleanAktivieren Sie diese Option, um die sessionID zurückzusetzen, wenn aus Ihrer Anwendung heraus ein neuer Tab geöffnet wird. Dabei wird die Methodewindow.openüberschrieben, um doppelte sessionIDs aufgrund des gemeinsam genutzten Session Storage zwischen Browser-Tabs zu vermeiden. Standard:false.forceSingleTab: booleanDeaktiviert die Multi-Tab-Aufzeichnung, die Benutzersitzungen über mehrere Tabs hinweg zu einem einzigen Replay zusammenführt. Ist diese Option aktiviert, werden Sitzungen, die in verschiedenen Browser-Tabs erfasst werden, stattdessen in separaten Aufzeichnungen gespeichert. Standard:false.disableStringDict: booleanDeaktiviert die String-Dictionary-Logik (zur Speicheroptimierung) in Aufzeichnungen. Standard:false.fixedCanvasScaling: booleanErzwingt, dass Canvas-Bilder mit einer Pixeldichte von 1 statt mit devicePixelRatio gerendert werden (verringert die mögliche Qualität eines Bildes, damit das Ergebnis kleiner ausfällt). Standard:false.disableCanvas?: booleanDeaktiviert die Aufzeichnung von Canvas-Elementen. Standard:false.assistSocketHost?: stringKann verwendet werden, um einen bestimmten Host für die Verbindung des Assist-Plugins festzulegen. Standardmäßig wird der Wert voningestPointverwendet.analytics?: { active: boolean, ingestPoint?: string }Aktiviert das Analytics SDK, dastracker.analytics(Events, Super Properties und Benutzerprofile) sowie die übergeordnete Kurzformtracker.track()bereitstellt. Das SDK wird nicht instanziiert, solangeactivenichttrueist, undtracker.analyticsbleibt bis dahinnull. MitingestPointkönnen Self-Hosting-Bereitstellungen Analytics an einen anderen Endpunkt als den Replay-Ingest senden; bei OpenReplay Cloud wird die Angabe ignoriert. Standard:{ active: false }.nodes?: { maintainer: MaintainerOptions }Die neue Optionnodes.maintainerhilft bei der Speicherverwaltung und räumt DOM-Knoten auf, die nicht mehr verwendet werden. Sie hat die folgenden Parameter:interval: number: Zeitintervall (in Millisekunden) zwischen den Bereinigungsläufen. Standard:30 * 1000(30 Sekunden).batchSize: number: Anzahl der Knoten, die bei jedem Bereinigungslauf geprüft werden. Standard:2500.enabled: boolean: Aktiviert oder deaktiviert den Node Maintainer. Standard:true.
Stylesheets
Section titled StylesheetsinlineCss: number: Zwingt den Tracker, externe Stylesheets als reguläre Nachrichten aufzuzeichnen und zu senden, statt sie im Backend zu cachen. Das ist nützlich, wenn CSS-Dateien privat sind und daher vom OpenReplay-Backend nicht gecacht werden können. Mögliche Werte:0: Die CSS-Datei wird vom Backend gecacht. Standardverhalten.1: Versucht, die verknüpfte CSS-Datei als AdoptedStyleSheet-Objekt aufzuzeichnen.2: Ruft die Datei ab und simuliert dann das Verhalten von AdoptedStyleSheets für das Replay.3: Ruft die Datei ab und speichert sie dann als reines CSS in einem<style>-Knoten — verwenden Sie diese Option, wenn Ihre CSS-Dateien viele Shorthand-Eigenschaften enthalten (umgeht einen Fehler in der CSSOM-Spezifikation).
css: CssRulesOptions: Bietet bessere Unterstützung für Anwendungen, die mit der Bibliothek emotion-js erstellt wurden (z. B. MUI-Komponenten). Sie umfasst die folgenden Parameter:scanInMemoryCSS: boolean: Aktivieren Sie dies, wenn Sie Probleme mit Stilen haben, die von emotionjs erzeugt wurden. Standard:false.checkCssInterval: number: Wie oft getrackte Stylesheets mit leeren Regeln gescannt werden. Standard:200(ms).checkLimit: number: Nützlich bei einer begrenzten Anzahl von Mutationen und/oder wenn Stylesheets nach dem initialen Rendern auf dem Client hydriert werden. Wird auf jedes Stylesheet einzeln angewendet. Der Wert sollte X/checkCssInterval entsprechen, wobei X die Beobachtungsdauer in ms ist. Standard:0(deaktiviert).
Datenschutz
Section titled DatenschutzrespectDoNotTrack?: booleanStartet den Tracker nicht, wenn im Browser des Benutzers das Do-not-track-Flag aktiviert ist. Standard:false.obscureTextEmails?: booleanVerschleiert E-Mail-Adressen in Textelementen. E-Mail-Adressen werden in eine zufällige Zeichenkette aus Sternchen umgewandelt. Standard:true.obscureTextNumbers?: booleanVerschleiert Zahlen in Textelementen. Zahlen werden in eine zufällige Zeichenkette aus Sternchen umgewandelt. Standard:false.obscureInputEmails?: booleanVerschleiert E-Mail-Adressen in Eingabefeldern. E-Mail-Werte werden in eine zufällige Zeichenkette aus Sternchen umgewandelt. Standard:true.obscureInputNumbers?: booleanVerschleiert Zahlen in Eingabefeldern. Zahlenwerte werden in eine zufällige Zeichenkette aus Sternchen umgewandelt. Wenn die Option deaktiviert ist, stellen Sie sicher, dass Sie Eingabefelder bereinigen, die sensible Daten wie Postleitzahlen oder Kreditkartendaten enthalten können. Standard:true.obscureInputDates?: booleanVerschleiert Datumsangaben in Eingabefeldern. Datumswerte werden in eine zufällige Zeichenkette aus Sternchen umgewandelt. Standard:false.defaultInputMode?: 0 | 1 | 2Standardmäßiger Erfassungsmodus für Eingabewerte. Der Reihe nach: Klartext, verschleiert oder ignoriert. Standard:2(ignoriert).urls: Ermöglicht es Ihnen, die Aufzeichnung von Seitenaufruf-Ereignissen über die folgenden Optionen anzupassen:urlSanitizer?: (url: string) => stringErmöglicht es Ihnen, die Seiten-URL zu bereinigen (z. B. um Nutzungstoken zu entfernen).titleSanitizer?: (title: string) => stringErmöglicht es Ihnen, den Seitentitel zu bereinigen.
resourceNameSanitizer?: (url: string) => stringErmöglicht es Ihnen, die URLs aufgezeichneter Netzwerkressourcen zu bereinigen.
Beachten Sie, dass ausgeschlossene Daten verschleiert oder unterdrückt werden, bevor sie an die OpenReplay-Server gesendet werden. Änderungen an den obigen Optionen wirken nicht rückwirkend und gelten nur für neu erfasste Daten. Weitere Details finden Sie unter Daten bereinigen.
Konsole
Section titled KonsoleconsoleMethods?: Array<'log' | 'info' | 'warn' | 'error' 'debug' | 'assert'> | nullLegt die Liste der Konsolenmethoden fest, die erfasst werden. Standard:['log', 'info', 'warn', 'error', 'debug', 'assert']consoleThrottling?: numberMaximale Anzahl erfasster Konsoleneinträge pro Sekunde. Standard:30.
Exceptions
Section titled ExceptionscaptureExceptions?: booleanErfasst JavaScript-Exceptions und Stacktraces. Standard:true.
Timings
Section titled TimingscaptureResourceTimings?: booleanProtokolliert Resource Timings. Standard:true.capturePageLoadTimings?: booleanProtokolliert Page-Load-Timings. Standard:true.capturePageRenderTimings?: booleanBerechnet Metriken zum Seitenrendering wie Speed Index, Visually Complete oder Time To Interactive. ErfordertcaptureResourceTimings = true. Standard:true.
Performance
Section titled PerformancecapturePerformance?: booleanZum Erfassen von Performance-Metriken wie Framerate sowie CPU- und Speicherverbrauch. Standard:true.longTasks?: booleanZum Erfassen von Long-Animation-Frame-Ereignissen. Standard:false.
Netzwerk
Section titled NetzwerkDie Option network bezieht sich auf die Erfassung von Netzwerkanfragen und Payloads für fetch und 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;
}
Beispiele und weitere Details dazu, wie Sie sensible Daten schwärzen, finden Sie unter Netzwerkoptionen.
Canvas
Section titled CanvasDie Option canvas bezieht sich auf die Erfassung von Canvas-/WebGL-Elementen:
canvas?: {
disableCanvas?: boolean
fixedCanvasScaling?: boolean
useAnimationFrame?: boolean
fileExt?: 'webp' | 'png' | 'jpeg' | 'avif'
}
Wie Sie diese Funktion aktivieren und welche Optionen zur Verfügung stehen, erfahren Sie unter Canvas und WebGL.
Domainübergreifende iFrames
Section titled Domainübergreifende iFramesDie Option crossdomain bezieht sich auf die Erfassung von iFrames aus anderen Domains. Sie wird zusammen mit der Option captureIFrames verwendet, die auf true gesetzt sein muss.
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
}
Ab Tracker-Version 14.0.10 ist das Attribut data-domain bei HTML-Elementen nicht mehr erforderlich, wenn Sie mit domainübergreifenden iFrames arbeiten.
Weitere Details dazu, wie Sie einen iFrame aus einer anderen Domain erfassen, finden Sie unter Tracking domainübergreifender iFrames.
Mauszeiger
Section titled MauszeigerDie Option mouse bezieht sich auf die Erfassung von Selektoren für Klicks, um Clickmaps zu erstellen.
mouse?:
{
disableClickmaps?: boolean
minSelectorDepth?: number
nthThreshold?: number
maxOptimiseTries?: number
}
disableClickmaps?: booleanDeaktiviert die Selektor-Berechnung vollständig. Standard:false.minSelectorDepth?: numberMinimale Länge eines optimierten Selektors (Standard 2). Beispiel:body > div > div > p => body > pnthThreshold?: numberAnzahl der Selektor-Versuche, bevor auf nth-child-Selektoren zurückgegriffen wird. Dies ist ein aufwendiger Vorgang und kann erheblichen Mehraufwand verursachen; legen Sie keinen Wert über 2000 fest. Standard:1000.maxOptimiseTries?: numberAnzahl der Versuche, den Selektor zu optimieren und zu verkürzen. Standard:10 000.
Wiederverbindungen
Section titled WiederverbindungenconnAttemptCount?: numberMaximale Anzahl an Wiederholungen, wenn HTTP-Anfragen des Trackers das Backend nicht erreichen. Standard:10.connAttemptGap?: numberDauer zwischen den einzelnen Wiederholungsversuchen (in ms). Standard:8000.
Sicherheit
Section titled Sicherheit__DISABLE_SECURE_MODE?: booleanErlaubt eine unsichere Verbindung zwischen Tracker und Backend auf Websites ohne SSL. Verwenden Sie dies ausschließlich zu Entwicklungszwecken. Standard:false.