# Načini zaključka nakupa

> Kako odjemalec izbira med vdelano ploščo in pojavnim oknom, zakaj o tem odločajo zaupanja vredna izhodišča in kaj lahko pričakujete med lokalnim razvojem.

Zaključek nakupa se odpre v enem od dveh načinov.

**Plošča** je vdelana plošča, prikazana znotraj vaše strani. Na namiznih napravah se pomakne z desne strani, njena širina pa je omejena z `pane.width`; v mobilnih napravah se pomakne navzgor z dna. Obiskovalec ostane na vašem spletnem mestu, plošča pa se zapre, ko pritisne tipko Escape ali klikne zatemnjeno območje.

**Pojavno okno** je ločeno okno brskalnika, postavljeno na sredino zaslona obiskovalca. Odjemalec spremlja, ali je okno zaprto, da lahko odstrani ozadje.

## Vdelani zaključek nakupa zahteva zaupanja vredno izhodišče

Način plošče prikaže zaključek nakupa Entase v elementu iframe na vaši domeni, zato je dovoljen le za domene, ki ste jih izrecno odobrili. V razdelku Nastavitve → Integracije dodajte med **Zaupanja vredna izhodišča** vsako domeno, ki odpre zaključek nakupa – glejte [Integracije in prilagajanje zaključka nakupa](/organizers/settings/integrations-and-checkout-customization.md).

Pomembno je, ali je vključena predpona `www.`. Če niste prepričani, katero obliko uporablja vaše spletno mesto, dodajte obe.

Če vaše domene ni na seznamu, zaključek nakupa še vedno deluje – le odpre se kot pojavno okno.

## Kako se razreši `'auto'`

Pri privzeti nastavitvi `checkoutMode: 'auto'` se odjemalec odloči v naslednjem vrstnem redu:

1. **Brez HTTPS** → pojavno okno. Vdelani zaključek nakupa se nikoli ne uporabi na nezaščiteni strani.
2. **`localhost` ali `127.0.0.1`** → plošča, pri čemer se v konzolo zapiše opozorilo. To je priročnost za razvoj, da lahko gradite z vdelano postavitvijo; ne pove ničesar o tem, ali je vaša produkcijska domena dovoljena.
3. **V drugih primerih** → odjemalec Entase vpraša, ali lahko to izhodišče uporablja vdelani zaključek nakupa, pri čemer pošlje `pk` za prepoznavo računa. Če odgovor vključuje ploščo, način postane plošča.

Dokler ta odgovor ne prispe, je način **popup**. To vedenje vas bo najverjetneje presenetilo: preverjanje je asinhrono, zato lahko klic `book()`, sprožen takoj ob nalaganju strani – preden je imel obiskovalec možnost kar koli klikniti – še vedno odpre pojavno okno tudi na povsem pravilno konfigurirani domeni. V praksi dejanski klik vedno sledi precej po tem, ko je preverjanje zaključeno. Če zaključek nakupa odpirate samodejno, način vsilite, namesto da se zanašate na zaznavanje.

## Vsilitev načina

Če želite zaznavanje v celoti preskočiti, nastavite `checkoutMode` izrecno:

```js
const entase = new Entase({ pk: 'YOUR_PUBLISHABLE_KEY', checkoutMode: 'popup' });
```

Lahko pa ga preglasite za posamezno rezervacijo:

```js
entase.book('EVENT_ID', { checkoutMode: 'popup' });
```

Če na domeni, ki ni zaupanja vredno izhodišče, vsilite `'pane'`, s tem ne pridobite dovoljenja – plošča se odpre, vendar zaključek nakupa v njej ne more komunicirati z vašo stranjo. `'popup'` uporabite kot zavestno izbiro, `'auto'` pa pustite nastavljen, kadar želite vdelani zaključek nakupa povsod, kjer je dovoljen.

Neprepoznana vrednost se prezre in obravnava kot `'auto'`.

## Branje in spreminjanje načina med izvajanjem

```js
entase.getCheckoutMode();        // 'pane' or 'popup' — never 'auto'
entase.setCheckoutMode('popup'); // applies to every later book() call
```

`getCheckoutMode()` vrne *razrešeni* način, zato sporoča, kaj se bo dejansko zgodilo. Če način nastavite nazaj na `'auto'`, se zaznavanje znova izvede.

## Blokatorji pojavnih oken

Brskalniki `window.open()` dovolijo le med dejanjem uporabnika. `book()` pokličite neposredno znotraj obravnavalnika klika – ne po `await`, `fetch` ali `setTimeout`, saj do takrat dejanje poteče in pojavno okno je blokirano.

```js
// Blocked: the gesture is gone by the time book() runs.
button.addEventListener('click', async () => {
  const event = await fetch('/api/current-event').then(r => r.json());
  entase.book(event.id);
});

// Fine: resolve the id first, open on the click.
button.addEventListener('click', () => entase.book(button.dataset.eventId));
```

To vpliva le na način pojavnega okna. Način plošče ustvari element na strani in zanj to ne velja.
