# Resolução de problemas

> As falhas mais frequentes ao integrar o cliente – checkout incorporado que recorre a uma janela pop-up, janelas bloqueadas, contentores em falta e avisos na consola.

O cliente regista tudo o que comunica na consola do browser, com o prefixo `[Entase API]`. Comece por abrir a consola.

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

A causa habitual, pela ordem em que vale a pena verificar:

1. **O domínio não é uma origem fidedigna.** Adicione-o em Definições → Integrações, correspondendo ao prefixo `www.` que o seu site efetivamente disponibiliza – consulte [Integrações e personalização do checkout](/organizers/settings/integrations-and-checkout-customization.md).
2. **A página não é disponibilizada através de HTTPS.** O checkout incorporado nunca é utilizado numa página não segura.
3. **Não existe uma chave publicável.** Sem `pk`, o cliente não consegue verificar se o checkout incorporado é permitido, pelo que permanece numa janela pop-up.
4. **`book()` foi executado demasiado cedo.** A verificação de permissão é assíncrona e o modo é janela pop-up até receber uma resposta. Um checkout aberto automaticamente ao carregar a página pode antecipar-se a essa resposta – consulte [Modos de checkout](/developers/js-client/checkout-modes.md).
5. **`connect-src` é bloqueado pela sua Política de Segurança de Conteúdo**, pelo que a verificação nunca é concluída. A consola mostrará o pedido bloqueado.

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

## "Modo de checkout em painel ativado para localhost"

É esperado durante o desenvolvimento. O cliente assume o modo de painel em `localhost` e `127.0.0.1` para que possa desenvolver com base no esquema incorporado e apresenta um aviso porque essa suposição não diz nada sobre produção. Adicione o seu domínio real às origens fidedignas antes da publicação.

## A janela pop-up é bloqueada

Os browsers só permitem abrir uma janela durante uma ação do utilizador. Chame `book()` de forma síncrona dentro do manipulador de clique, não após um `await`, um `fetch` ou um `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 [Instalar o cliente](/developers/js-client/installing-the-client.md).

## "Entase is not defined"

O script ainda não tinha terminado de carregar quando o seu código foi executado. Isto acontece quando `client.js` é carregado com `async` ou `defer`, ou é colocado depois do script que o utiliza. Aguarde pelo evento `entase:ready` – consulte [Instalar 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 esta já não pode ser utilizada. Numa aplicação de página única, isto normalmente significa que um componente desmontou o respetivo cliente, enquanto uma referência partilhada se manteve. Crie uma nova instância para a nova vista.

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

Apenas para o widget incorporado. O código `obj` na configuração não corresponde a nenhum elemento na página. O id do contentor tem de ser `entase_` seguido pelo mesmo código, e tem de existir no DOM antes de o widget ser inicializado – verifique se há um erro de escrita ou se existe um contentor apresentado mais tarde pelos seus próprios scripts.

## Só é executado o último listener de evento

`on()` mantém uma chamada de retorno por nome de evento, e o registo de uma segunda substitui a primeira. Registe-a uma vez e distribua a partir dessa chamada de retorno – consulte [Eventos](/developers/js-client/events.md).

## A janela pop-up abre no ecrã errado

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

## Faltam parâmetros de rastreio nas encomendas

O cliente autónomo não lê o URL da sua página. Encaminhe você mesmo os parâmetros para `tprm` – consulte [Rastreio e consentimento](/developers/js-client/tracking-and-consent.md). Tenha em atenção que `setTracking()` substitui todo o objeto em vez de fazer a respetiva fusão, pelo que uma chamada posterior pode eliminar silenciosamente parâmetros anteriores.
