# Resolución de problemas

> Los fallos más habituales al integrar el cliente – checkout integrado que recurre a una ventana emergente, ventanas bloqueadas, contenedores ausentes y advertencias de la consola.

El cliente registra todo lo que comunica en la consola del navegador, con el prefijo `[Entase API]`. Abre primero la consola.

## El checkout se abre como ventana emergente en lugar de como panel

Estas son las causas habituales, en el orden en que conviene comprobarlas:

1. **El dominio no es un origen de confianza.** Añádelo en Configuración → Integraciones, respetando el prefijo `www.` que utiliza realmente tu sitio – consulta [Integraciones y personalización del checkout](/organizers/settings/integrations-and-checkout-customization.md).
2. **La página no se sirve mediante HTTPS.** El checkout integrado nunca se utiliza en una página insegura.
3. **No hay clave publicable.** Sin `pk`, el cliente no puede comprobar si se permite el checkout integrado, por lo que se mantiene la ventana emergente.
4. **`book()` se ejecutó demasiado pronto.** La comprobación de permisos es asíncrona y el modo es de ventana emergente hasta que responde. Un checkout abierto automáticamente al cargar la página puede adelantarse a ella – consulta [Modos de checkout](/developers/js-client/checkout-modes.md).
5. **`connect-src` está bloqueado por tu Política de Seguridad de Contenido**, por lo que la comprobación nunca termina. La consola mostrará la solicitud bloqueada.

`entase.getCheckoutMode()` informa del modo resuelto y es la forma más rápida de distinguir los problemas de configuración de los de temporización.

## "Pane checkout mode enabled for localhost"

Es lo esperado durante el desarrollo. El cliente asume el modo de panel en `localhost` y `127.0.0.1` para que puedas desarrollar con el diseño integrado, y muestra una advertencia porque esa suposición no dice nada sobre producción. Añade tu dominio real a los orígenes de confianza antes de publicar.

## La ventana emergente está bloqueada

Los navegadores solo permiten abrir una ventana durante una acción del usuario. Llama a `book()` de forma síncrona dentro del controlador de clics, no después de un `await`, un `fetch` o un `setTimeout`. Consulta [Modos de checkout](/developers/js-client/checkout-modes.md).

## El panel se abre vacío

El iframe del checkout fue bloqueado. Permite `https://www.entase.com` en la directiva `frame-src` de tu Política de Seguridad de Contenido – consulta [Instalación del cliente](/developers/js-client/installing-the-client.md).

## "Entase is not defined"

El script no había terminado de cargarse cuando se ejecutó tu código. Esto ocurre cuando `client.js` se carga con `async` o `defer`, o se coloca después del script que lo utiliza. Espera al evento `entase:ready` – consulta [Instalación del cliente](/developers/js-client/installing-the-client.md).

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

Se llamó a `destroy()` en la instancia y ya no se puede utilizar. En una aplicación de página única, esto normalmente significa que un componente eliminó su cliente mientras seguía existiendo una referencia compartida. Crea una nueva instancia para la nueva vista.

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

Solo para el widget incrustado. El código `obj` de la configuración no coincide con ningún elemento de la página. El id del contenedor debe ser `entase_` seguido del mismo código, y debe existir en el DOM antes de que se inicialice el widget – comprueba si hay una errata o si tus propios scripts renderizan el contenedor más tarde.

## Solo se ejecuta el último listener de eventos

`on()` mantiene una devolución de llamada por nombre de evento, y registrar una segunda sustituye a la primera. Regístrala una vez y distribuye desde dentro de esa devolución de llamada – consulta [Eventos](/developers/js-client/events.md).

## La ventana emergente se abre en la pantalla equivocada

El punto central se calcula al crear la instancia y no se actualiza cuando el visitante mueve la ventana del navegador. Vuelve a calcularlo antes de reservar con `setTopWindowCenter()` – consulta [Referencia de métodos](/developers/js-client/methods.md).

## Faltan parámetros de seguimiento en los pedidos

El cliente independiente no lee la URL de tu página. Transmite tú mismo los parámetros a `tprm` – consulta [Seguimiento y consentimiento](/developers/js-client/tracking-and-consent.md). Ten en cuenta que `setTracking()` sustituye el objeto completo en lugar de combinarlo, por lo que una llamada posterior puede eliminar silenciosamente parámetros anteriores.
