# Solução de problemas

> As falhas mais comuns na integração do cliente – checkout integrado voltando para um pop-up, janelas bloqueadas, contêineres ausentes e avisos no console.

O cliente registra tudo o que reporta no console do navegador, com o prefixo `[Entase API]`. Abra o console primeiro.

## O checkout abre como um pop-up em vez de um painel

A causa mais comum, na ordem em que vale a pena verificar:

1. **O domínio não é uma origem confiável.** Adicione-o em Configurações → Integrações, correspondendo ao prefixo `www.` que seu site realmente utiliza – consulte [Integrações e personalização do checkout](/organizers/settings/integrations-and-checkout-customization.md).
2. **A página não é servida por HTTPS.** O checkout integrado nunca é usado em uma página insegura.
3. **Não há chave publicável.** Sem `pk`, o cliente não consegue verificar se o checkout integrado é permitido e, por isso, mantém o pop-up.
4. **`book()` foi executado cedo demais.** A verificação de permissão é assíncrona, e o modo é pop-up até que ela responda. Um checkout aberto automaticamente no carregamento da página pode ser executado antes dela – consulte [Modos de checkout](/developers/js-client/checkout-modes.md).
5. **`connect-src` está bloqueado pela sua Política de Segurança de Conteúdo**, portanto a verificação nunca é concluída. O console mostrará a solicitação bloqueada.

`entase.getCheckoutMode()` informa o modo resolvido e é a maneira mais rápida de distinguir problemas de configuração de problemas de temporização.

## "Pane checkout mode enabled for localhost"

Isso é esperado durante o desenvolvimento. O cliente assume o modo de painel em `localhost` e `127.0.0.1` para que você possa desenvolver com base no layout integrado e exibe um aviso porque essa suposição não diz nada sobre a produção. Adicione seu domínio real às origens confiáveis antes de publicar.

## O pop-up está bloqueado

Os navegadores só permitem que uma janela seja aberta durante uma ação do usuário. Chame `book()` de forma síncrona dentro do manipulador de clique, não depois de um `await`, `fetch` ou `setTimeout`. Consulte [Modos de checkout](/developers/js-client/checkout-modes.md).

## O painel abre vazio

O iframe do checkout foi bloqueado. Permita `https://www.entase.com` na diretiva `frame-src` da sua Política de Segurança de Conteúdo – consulte [Instalando o cliente](/developers/js-client/installing-the-client.md).

## "Entase is not defined"

O script não havia terminado de carregar quando seu código foi executado. Isso acontece quando `client.js` é carregado com `async` ou `defer`, ou é colocado depois do script que o utiliza. Aguarde o evento `entase:ready` – consulte [Instalando o cliente](/developers/js-client/installing-the-client.md).

## "Trying to book an event after the Client has been destroyed"

`destroy()` foi chamado na instância, e ela não pode mais ser usada. Em uma aplicação de página única, isso normalmente significa que um componente desmontou seu cliente enquanto uma referência compartilhada permaneceu em uso. Crie uma nova instância para a nova visualização.

## "Entase frame initialization failed. Container not found."

Somente widget incorporado. O código `obj` na configuração não corresponde a nenhum elemento da página. O id do contêiner deve ser `entase_` seguido pelo mesmo código, e ele deve existir no DOM antes de o widget ser inicializado – verifique se há um erro de digitação ou se o contêiner é renderizado posteriormente pelos seus próprios scripts.

## Apenas o último ouvinte de evento é executado

`on()` mantém um callback por nome de evento, e registrar um segundo substitui o primeiro. Registre uma vez e distribua a partir desse callback – consulte [Eventos](/developers/js-client/events.md).

## O pop-up abre na tela errada

O ponto central é calculado quando a instância é criada e não é atualizado quando o visitante move a janela do navegador. Recalcule-o antes de reservar com `setTopWindowCenter()` – consulte [Referência de métodos](/developers/js-client/methods.md).

## Parâmetros de rastreamento estão ausentes dos pedidos

O cliente independente não lê a URL da sua página. Encaminhe os parâmetros você mesmo para `tprm` – consulte [Rastreamento e consentimento](/developers/js-client/tracking-and-consent.md). Observe que `setTracking()` substitui o objeto inteiro em vez de mesclá-lo, portanto uma chamada posterior pode remover silenciosamente parâmetros anteriores.
