# Vianmääritys

> Yleisimmät virheet asiakasohjelman integroinnissa – sisäinen kassa vaihtuu ponnahdusikkunaan, ikkunat estyvät, säilöjä puuttuu ja konsoli näyttää varoituksia.

Asiakasohjelma kirjaa kaiken selaimen konsoliin etuliitteellä `[Entase API]`. Avaa ensin konsoli.

## Kassa avautuu ponnahdusikkunana paneelin sijaan

Tavallisimmat syyt tarkistusjärjestyksessä:

1. **Verkkotunnus ei ole luotettu alkuperä.** Lisää se kohdassa Asetukset → Integraatiot ja varmista, että `www.`-etuliite vastaa sivustosi todellista osoitetta – katso [Integraatiot ja kassan mukauttaminen](/organizers/settings/integrations-and-checkout-customization.md).
2. **Sivua ei tarjoilla HTTPS:n kautta.** Sisäistä kassaa ei koskaan käytetä suojaamattomalla sivulla.
3. **Julkaistava avain puuttuu.** Ilman `pk`-avainta asiakasohjelma ei voi tarkistaa, onko sisäinen kassa sallittu, joten se käyttää ponnahdusikkunaa.
4. **`book()` suoritettiin liian aikaisin.** Käyttöoikeuden tarkistus on asynkroninen, ja tila on ponnahdusikkuna, kunnes tarkistus vastaa. Sivun latautuessa automaattisesti avattava kassa voi ehtiä ennen tarkistusta – katso [Kassan tilat](/developers/js-client/checkout-modes.md).
5. **`connect-src` on estetty Content Security Policy -käytännössäsi**, joten tarkistus ei koskaan valmistu. Konsolissa näkyy estetty pyyntö.

`entase.getCheckoutMode()` ilmoittaa ratkaistun tilan, ja sen avulla erotat nopeimmin määritysongelmat ajoitusongelmista.

## "Pane checkout mode enabled for localhost"

Tämä on odotettua kehityksen aikana. Asiakasohjelma olettaa paneelitilan osoitteissa `localhost` ja `127.0.0.1`, jotta voit kehittää sisäistä asettelua vasten, ja varoittaa, koska tämä oletus ei kerro mitään tuotantoympäristöstä. Lisää oikea verkkotunnuksesi luotettuihin alkuperiin ennen julkaisua.

## Ponnahdusikkuna estyy

Selaimet sallivat ikkunan avaamisen vain käyttäjän toiminnon yhteydessä. Kutsu `book()` synkronisesti napsautuksenvälittäjän sisällä, ei `await`-, `fetch`- tai `setTimeout`-kutsun jälkeen. Katso [Kassan tilat](/developers/js-client/checkout-modes.md).

## Paneeli avautuu tyhjänä

Kassan iframe estettiin. Salli `https://www.entase.com` Content Security Policy -käytäntösi `frame-src`-direktiivissä – katso [Asiakasohjelman asentaminen](/developers/js-client/installing-the-client.md).

## "Entase is not defined"

Skriptin lataus ei ollut valmis, kun koodisi suoritettiin. Näin tapahtuu, kun `client.js` ladataan `async`- tai `defer`-määritteellä tai sijoitetaan sitä käyttävän skriptin jälkeen. Odota `entase:ready`-tapahtumaa – katso [Asiakasohjelman asentaminen](/developers/js-client/installing-the-client.md).

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

Instanssissa kutsuttiin `destroy()`, eikä sitä voi enää käyttää. Yksisivuisessa sovelluksessa tämä tarkoittaa yleensä sitä, että komponentti purki asiakasohjelmansa, vaikka jaettu viittaus säilyi käytössä. Luo uusi instanssi uutta näkymää varten.

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

Vain upotetulle widgetille. Määrityksen `obj`-koodi ei vastaa mitään sivun elementtiä. Säilön tunnuksen on oltava `entase_` ja sen jälkeen sama koodi, ja sen on oltava DOM:ssa ennen widgetin alustamista – tarkista kirjoitusvirhe tai se, että omat skriptisi renderöivät säilön myöhemmin.

## Vain viimeinen tapahtumakuuntelija suoritetaan

`on()` säilyttää yhden takaisinsoittokutsun kutakin tapahtuman nimeä kohden, ja toisen rekisteröinti korvaa ensimmäisen. Rekisteröi kerran ja jaa käsittely kyseisen takaisinsoittokutsun sisältä – katso [Tapahtumat](/developers/js-client/events.md).

## Ponnahdusikkuna avautuu väärälle näytölle

Keskipiste lasketaan instanssia luotaessa, eikä sitä päivitetä, kun kävijä siirtää selainikkunaa. Laske se uudelleen ennen varaamista kutsulla `setTopWindowCenter()` – katso [Menetelmäviite](/developers/js-client/methods.md).

## Seurantaparametrit puuttuvat tilauksista

Erillinen asiakasohjelma ei lue sivusi URL-osoitetta. Välitä parametrit itse `tprm`-objektiin – katso [Seuranta ja suostumus](/developers/js-client/tracking-and-consent.md). Huomaa, että `setTracking()` korvaa koko objektin sen sijaan, että yhdistäisi siihen uusia tietoja, joten myöhempi kutsu voi huomaamatta poistaa aiemmat parametrit.
