# Rozwiązywanie problemów

> Najczęstsze problemy występujące podczas integracji klienta – wbudowany checkout przełączający się na wyskakujące okno, blokowane okna, brakujące kontenery i ostrzeżenia w konsoli.

Klient zapisuje w konsoli przeglądarki wszystkie zgłaszane komunikaty, poprzedzając je prefiksem `[Entase API]`. Najpierw otwórz konsolę.

## Checkout otwiera się jako wyskakujące okno zamiast panelu

Najczęstsze przyczyny, w kolejności, w jakiej warto je sprawdzić:

1. **Domena nie jest zaufanym źródłem.** Dodaj ją w Ustawienia → Integracje, uwzględniając prefiks `www.`, którego faktycznie używa Twoja witryna – zobacz [Integracje i dostosowywanie checkoutu](/organizers/settings/integrations-and-checkout-customization.md).
2. **Strona nie jest udostępniana przez HTTPS.** Wbudowany checkout nigdy nie jest używany na niezabezpieczonej stronie.
3. **Brak klucza publicznego.** Bez `pk` klient nie może sprawdzić, czy wbudowany checkout jest dozwolony, więc pozostaje przy wyskakującym oknie.
4. **`book()` zostało wywołane zbyt wcześnie.** Sprawdzanie uprawnień jest asynchroniczne, a do czasu uzyskania odpowiedzi używany jest tryb wyskakującego okna. Checkout otwierany automatycznie podczas ładowania strony może wyprzedzić tę odpowiedź – zobacz [Tryby checkoutu](/developers/js-client/checkout-modes.md).
5. **`connect-src` jest blokowane przez Twoją politykę Content Security Policy**, więc sprawdzenie nigdy się nie kończy. Konsola wyświetli zablokowane żądanie.

`entase.getCheckoutMode()` zwraca ustalony tryb i jest najszybszym sposobem na odróżnienie problemów z konfiguracją od problemów z synchronizacją.

## „Pane checkout mode enabled for localhost”

To oczekiwane zachowanie podczas programowania. Klient zakłada tryb panelu dla `localhost` i `127.0.0.1`, aby umożliwić tworzenie integracji z wbudowanym układem, i wyświetla ostrzeżenie, ponieważ założenie to nic nie mówi o środowisku produkcyjnym. Przed wdrożeniem dodaj swoją rzeczywistą domenę do zaufanych źródeł.

## Wyskakujące okno jest blokowane

Przeglądarki pozwalają otworzyć okno tylko podczas działania użytkownika. Wywołaj `book()` synchronicznie w obsłudze kliknięcia, a nie po `await`, `fetch` ani `setTimeout`. Zobacz [Tryby checkoutu](/developers/js-client/checkout-modes.md).

## Panel otwiera się pusty

Element iframe checkoutu został zablokowany. Zezwól na `https://www.entase.com` w dyrektywie `frame-src` polityki Content Security Policy – zobacz [Instalowanie klienta](/developers/js-client/installing-the-client.md).

## „Entase is not defined”

Skrypt nie zakończył ładowania, gdy uruchomiono Twój kod. Dzieje się tak, gdy `client.js` jest ładowany z użyciem `async` lub `defer`, albo gdy jest umieszczony po skrypcie, który go wykorzystuje. Poczekaj na zdarzenie `entase:ready` – zobacz [Instalowanie klienta](/developers/js-client/installing-the-client.md).

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

Na instancji wywołano `destroy()` i nie można jej już używać. W aplikacji jednostronicowej zwykle oznacza to, że komponent usunął swojego klienta, podczas gdy współdzielone odwołanie nadal pozostało. Utwórz nową instancję dla nowego widoku.

## „Entase frame initialization failed. Container not found.”

Dotyczy tylko widżetu osadzanego. Kod `obj` w konfiguracji nie odpowiada żadnemu elementowi na stronie. Identyfikator kontenera musi mieć postać `entase_`, po której następuje ten sam kod, a kontener musi istnieć w DOM przed zainicjowaniem widżetu – sprawdź, czy nie ma literówki albo czy kontener nie jest renderowany później przez Twoje skrypty.

## Działa tylko ostatni nasłuch zdarzenia

`on()` zachowuje jedno wywołanie zwrotne na nazwę zdarzenia, a zarejestrowanie drugiego zastępuje pierwsze. Zarejestruj je raz i rozdzielaj obsługę wewnątrz tego wywołania zwrotnego – zobacz [Zdarzenia](/developers/js-client/events.md).

## Wyskakujące okno otwiera się na niewłaściwym ekranie

Punkt centralny jest obliczany podczas tworzenia instancji i nie jest aktualizowany, gdy odwiedzający przeniesie okno przeglądarki. Przelicz go ponownie przed rezerwacją za pomocą `setTopWindowCenter()` – zobacz [Opis metod](/developers/js-client/methods.md).

## W zamówieniach brakuje parametrów śledzenia

Samodzielny klient nie odczytuje adresu URL Twojej strony. Przekaż parametry samodzielnie do `tprm` – zobacz [Śledzenie i zgoda](/developers/js-client/tracking-and-consent.md). Pamiętaj, że `setTracking()` zastępuje cały obiekt, zamiast go scalać, więc późniejsze wywołanie może bez ostrzeżenia usunąć wcześniej przekazane parametry.
