SDK de JavaScript - Inicializando o SDK
Instalação
Section titled InstalaçãoA linha a seguir instalará o tracker e, com ele, o SDK, para que você aproveite todos os recursos do tracker.
npm i @openreplay/tracker
Inicialização
Section titled InicializaçãoAo instanciar o tracker do OpenReplay, há várias opções de configuração que você pode fornecer para personalizar muitos aspectos da gravação e da experiência de gravação.
Você deve definir a opção projectKey no construtor. Você pode obter esse valor no seu dashboard do OpenReplay em ‘Preferences > Projects’.
Aplicações de Página Única (SPA)
Section titled Aplicações de Página Única (SPA)Se o seu site é uma Aplicação de Página Única (SPA), você pode usar o tracker como singleton:
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)
Como alternativa, você pode criar uma nova instância da classe:
import OpenReplay from '@openreplay/tracker';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY
});
tracker.start(); // returns a promise with session info (sessionID, sessionHash, userUUID)
Renderização no lado do servidor (SSR)
Section titled Renderização no lado do servidor (SSR)Caso contrário, se o seu aplicativo web usa renderização no lado do servidor (SSR) (por exemplo, NextJS, NuxtJS), use o trecho abaixo.
Certifique-se de que tracker.start() seja chamado depois que o aplicativo for iniciado (em useEffect ou 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)
}, [])
}
Exemplo
Section titled Exemploimport 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
});
Opções de inicialização
Section titled Opções de inicializaçãoHá um conjunto de opções que você pode passar ao construtor. Somente projectKey é obrigatório.
Propósito geral
Section titled Propósito geralprojectKey: stringO ID do projeto que você está rastreando.sessionHash?: stringO hash da sessão inicial. É útil quando as sessões percorrem diferentes subdomínios do seu aplicativo web, mas você quer uni-las em uma única gravação. Caso não seja possível continuar a sessão (ela não existe ou já foi encerrada), o tracker iniciará automaticamente uma nova. Também é retornado emstop(). Mais detalhes sobre isso aqui.ingestPoint?: stringSeu domínio do OpenReplay (por exemplo, https://openreplay.mydomain.com/ingest), para o qual o tracker enviará os eventos. É opcional para usuários do OpenReplay Cloud. Padrão:https://api.openreplay.com/ingest(que aponta para o OpenReplay Cloud).revID?: stringO ID de revisão do seu aplicativo web. Útil ao pesquisar problemas ocorridos em uma versão específica de release.resourceBaseHref?: stringRefere-se ao domínio publicamente acessível de onde os assets (estilos, fontes e ícones) podem ser buscados pelo OpenReplay. Como eles são necessários para um session replay adequado, esta opção é útil para contornar a limitação de ter o seu site (e, portanto, os assets) hospedado em um domínio privado. Exemplo:https://mypublicsite.com/assets/.captureIFrames?: booleanPara capturar todos os iFrames do mesmo domínio no seu aplicativo web. Se você quiser rastrear um iFrame específico, basta adicionar o atributo HTMLdata-openreplay-captureà tag<iframe>. Padrão:true.disableClickmaps?: booleanPara desativar o cálculo de seletores CSS (usado nos mapas de cliques). Padrão:false.__debug__: numberPara ativar os logs de depuração. Padrão:0(desativado).2: Erros.3: Erros e avisos.4: Erros, avisos e logs.5: Detalhado (verbose).
autoResetOnWindowOpen?: booleanAtive esta opção para redefinir o sessionID ao abrir uma nova aba a partir do seu aplicativo. Isso sobrescreve o métodowindow.openpara evitar sessionIDs duplicados causados pelo armazenamento de sessão compartilhado entre as abas do navegador. Padrão:false.forceSingleTab: booleanDesativa o recurso de gravação multiabas, que une as sessões de usuário realizadas em várias abas em um único replay. Em vez disso, ao ativar esta opção, as sessões capturadas em abas diferentes do navegador serão gravadas em gravações separadas. Padrão:false.disableStringDict: booleanDesativa a lógica de dicionário de strings (para otimizar o armazenamento) nas gravações. Padrão:false.fixedCanvasScaling: booleanForça as imagens de canvas a serem renderizadas com densidade de pixels 1 em vez de devicePixelRatio (reduz a qualidade potencial de uma imagem para que o resultado final seja menor). Padrão:false.disableCanvas?: booleanDesativa a gravação de elementos canvas. Padrão:false.assistSocketHost?: stringPode ser usado para definir um host específico para a conexão do plugin do Assist. Por padrão, usa o valor deingestPoint.analytics?: { active: boolean, ingestPoint?: string }Ativa o SDK de Analytics, que expõetracker.analytics(eventos, super properties e perfis de usuário), além do atalho de nível superiortracker.track(). O SDK não é instanciado a menos queactivesejatrue, etracker.analyticspermanecenullaté lá.ingestPointpermite que implantações auto-hospedadas enviem os dados de analytics para um endpoint diferente do ingest de replays; ele é ignorado no OpenReplay Cloud. Padrão:{ active: false }.nodes?: { maintainer: MaintainerOptions }A nova opçãonodes.maintainerajuda a gerenciar a memória e a limpar nós do DOM que não estão mais em uso. Ela tem os seguintes parâmetros:interval: number: Intervalo de tempo (em milissegundos) entre as execuções de limpeza. Padrão:30 * 1000(30 segundos).batchSize: number: Número de nós a verificar em cada execução de limpeza. Padrão:2500.enabled: boolean: Ativa ou desativa o node maintainer. Padrão:true.
Folhas de estilo
Section titled Folhas de estiloinlineCss: number: Força o tracker a gravar e enviar folhas de estilo remotas como mensagens comuns, em vez de armazená-las em cache no backend. Isso é útil quando os arquivos CSS são privados e, portanto, não podem ser armazenados em cache pelo backend do OpenReplay. Os valores podem ser:0: O arquivo CSS é armazenado em cache pelo backend. Comportamento padrão.1: Tentará gravar o arquivo CSS vinculado como um objeto AdoptedStyleSheet.2: Busca o arquivo e, em seguida, simula o comportamento de AdoptedStyleSheets no replay.3: Busca o arquivo e, em seguida, o salva como CSS puro dentro de um nó<style>— use esta opção se você tiver muitas propriedades abreviadas (shorthand) nos seus arquivos CSS (contorna um bug da especificação CSSOM).
css: CssRulesOptions: Oferece melhor suporte a aplicações criadas com a biblioteca emotion-js (por exemplo, componentes do MUI). Ela vem com os parâmetros abaixo:scanInMemoryCSS: boolean: Ative se você tiver problemas com estilos criados pelo emotionjs. Padrão:false.checkCssInterval: number: Com que frequência verificar as folhas de estilo rastreadas que têm regras vazias. Padrão:200(ms).checkLimit: number: Útil em casos com número limitado de mutações e/ou quando as folhas de estilo são hidratadas no cliente após a renderização inicial. Aplicado a cada folha de estilo individualmente. O valor deve ser = X/checkCssInterval, em que X é a duração da observação em ms. Padrão:0(desativado).
Privacidade
Section titled PrivacidaderespectDoNotTrack?: booleanNão inicia o tracker se o sinalizador do-not-track estiver ativado no navegador do usuário. Padrão:false.obscureTextEmails?: booleanOfusca e-mails em elementos de texto. Os e-mails serão convertidos em uma sequência aleatória de asteriscos. Padrão:true.obscureTextNumbers?: booleanOfusca números em elementos de texto. Os números serão convertidos em uma sequência aleatória de asteriscos. Padrão:false.obscureInputEmails?: booleanOfusca e-mails em campos de entrada. Os valores de e-mail serão convertidos em uma sequência aleatória de asteriscos. Padrão:true.obscureInputNumbers?: booleanOfusca números em campos de entrada. Os valores numéricos serão convertidos em uma sequência aleatória de asteriscos. Se desativado, certifique-se de sanitizar os campos de entrada que possam conter dados sensíveis, como CEPs ou dados de cartão de crédito. Padrão:true.obscureInputDates?: booleanOfusca datas em campos de entrada. Os valores de data serão convertidos em uma sequência aleatória de asteriscos. Padrão:false.defaultInputMode?: 0 | 1 | 2Modo de captura padrão para valores de entrada. Respectivamente: texto simples, ofuscado ou ignorado. Padrão:2(ignorado).urls: Permite personalizar como os eventos de localização de página são gravados por meio das seguintes opções:urlSanitizer?: (url: string) => stringPermite sanitizar a URL da página (para remover tokens de uso, por exemplo).titleSanitizer?: (title: string) => stringPermite sanitizar o título da página.
resourceNameSanitizer?: (url: string) => stringPermite sanitizar as URLs dos recursos de rede gravados.
Observe que os dados excluídos são ofuscados ou suprimidos antes de serem enviados aos servidores do OpenReplay. As alterações aplicadas às opções acima não são retroativas e só valem para os dados coletados a partir de então. Consulte Sanitizar dados para mais detalhes.
Console
Section titled ConsoleconsoleMethods?: Array<'log' | 'info' | 'warn' | 'error' 'debug' | 'assert'> | nullEspecifica a lista de métodos do console a serem capturados. Padrão:['log', 'info', 'warn', 'error', 'debug', 'assert']consoleThrottling?: numberNúmero máximo de entradas do console capturadas por segundo. Padrão:30.
Exceções
Section titled ExceçõescaptureExceptions?: booleanCaptura exceções e stacktraces de JavaScript. Padrão:true.
Medições de tempo
Section titled Medições de tempocaptureResourceTimings?: booleanRegistra os tempos dos recursos. Padrão:true.capturePageLoadTimings?: booleanRegistra os tempos de carregamento da página. Padrão:true.capturePageRenderTimings?: booleanCalcula métricas de renderização da página, como Speed Index, Visually Complete ou Time To Interactive. RequercaptureResourceTimings = true. Padrão:true.
Desempenho
Section titled DesempenhocapturePerformance?: booleanPara capturar métricas de desempenho, como taxa de quadros, consumo de CPU e de memória. Padrão:true.longTasks?: booleanPara capturar eventos de long-animation-frame. Padrãofalse.
A opção network está relacionada à captura de requisições de rede e payloads de fetch e 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;
}
Consulte Opções de rede para ver exemplos e mais detalhes sobre como ocultar dados sensíveis.
Canvas
Section titled CanvasA opção canvas está relacionada à captura de elementos canvas/WebGL:
canvas?: {
disableCanvas?: boolean
fixedCanvasScaling?: boolean
useAnimationFrame?: boolean
fileExt?: 'webp' | 'png' | 'jpeg' | 'avif'
}
Consulte Canvas e WebGL para saber como ativar esse recurso e ver mais detalhes sobre as opções disponíveis.
iFrames entre domínios
Section titled iFrames entre domíniosA opção crossdomain está relacionada à captura de iFrames de domínios diferentes. Ela é usada em conjunto com a opção captureIFrames, que deve estar definida como 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
}
A partir da versão 14.0.10 do tracker, o atributo data-domain não é mais necessário em elementos HTML ao trabalhar com iFrames entre domínios.
Consulte Rastreamento de iFrames entre domínios para saber mais sobre como capturar um iFrame de um domínio diferente.
Ponteiro do mouse
Section titled Ponteiro do mouseA opção mouse está relacionada à captura de seletores de cliques para criar mapas de cliques.
mouse?:
{
disableClickmaps?: boolean
minSelectorDepth?: number
nthThreshold?: number
maxOptimiseTries?: number
}
disableClickmaps?: booleanDesativa totalmente o cálculo de seletores. Padrão:false.minSelectorDepth?: numberComprimento mínimo de um seletor otimizado (padrão 2). Exemplo:body > div > div > p => body > pnthThreshold?: numberNúmero de tentativas de seletor antes de recorrer a seletores nth-child. Esta é uma operação custosa e pode gerar uma sobrecarga significativa; não defina um valor maior que 2000. Padrão:1000.maxOptimiseTries?: numberNúmero de tentativas para otimizar e encurtar o seletor. Padrão:10 000.
Reconexões
Section titled ReconexõesconnAttemptCount?: numberNúmero máximo de novas tentativas quando as requisições HTTP do tracker não conseguem alcançar o backend. Padrão:10.connAttemptGap?: numberIntervalo entre cada tentativa (expresso em ms). Padrão:8000.
Segurança
Section titled Segurança__DISABLE_SECURE_MODE?: booleanPara permitir conexões inseguras entre o tracker e o backend em sites sem SSL. Deve ser usado somente para fins de desenvolvimento. Padrão:false.