# Kliendi installimine

> Laadige Entase CDN-ist client.js, seejärel looge eksemplar. Installitavat paketti ega ehitusetappi pole.

Klient on Entase CDN-is saadaval ühe failina. npm-paketti, ehitatavat kogumikku ega ajakohasena hoitavat sõltuvust pole – saate alati praeguse versiooni.

```html
<script src="https://js.entase.com/client.js"></script>
```

Skripti laadimine määratleb globaalse klassi `Entase`. See ei tee iseseisvalt midagi muud: ei võrgupäringuid, DOM-i muudatusi ega renderdatud sisu. Kõik algab eksemplari loomisest.

## Eksemplari loomine

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

Looge **üks eksemplar lehe kohta** ja kasutage seda kõigi sündmuste jaoks uuesti. Konstruktor registreerib aknas `message`-kuulaja ja hakkab tuvastama, millist checkout-režiimi teie domeenil on lubatud kasutada, seega tähendab mitme eksemplari loomine ilma igasuguse eeliseta dubleeritud kuulajaid ja tuvastuspäringuid.

Igal suvandil on vaikeväärtus, seega on argumentideta `new Entase()` kehtiv – kuid ilma `pk`-ta ei saa klient kontrollida, kas teie domeen võib kasutada lehesisest checkout'i, ning naaseb alati hüpikakna juurde. Vt [Checkout-režiimid](/developers/js-client/checkout-modes.md).

## Skripti asünkroonne laadimine

Kui laadite `client.js`-i atribuudiga `async` või `defer`, pole klassi teie tekstisisese skripti käivitumise ajal veel olemas. Teek saadab pärast laadimist `window`-le sündmuse `entase:ready`, seega oodake seda:

```html
<script src="https://js.entase.com/client.js" async></script>
<script>
  let entase = null;

  const init = () => { entase = new Entase({ pk: 'YOUR_PUBLISHABLE_KEY' }); };

  if (typeof Entase !== 'undefined') init();
  else window.addEventListener('entase:ready', init);
</script>
```

Kõigepealt tuleb kontrollida `typeof`-i: kui skripti laadimine on juba lõppenud, on `entase:ready` juba käivitatud ja selle kuulamine jääks igaveseks ootama.

## Puhastamine

Üheleherakenduses kutsuge `destroy()` välja, kui eksemplarile kuuluv vaade eemaldatakse:

```js
entase.destroy();
```

See eemaldab kliendi registreeritud aknakuulajad. Hävitatud eksemplari ei saa uuesti kasutada – sellel `book()`-i kutsumine logib vea ega tee midagi. Looge selle asemel uus eksemplar.

## Sisuturvapoliitika

Kui teie sait saadab päise `Content-Security-Policy`, vajab checkout järgmist:

- `script-src https://js.entase.com` – teegi laadimiseks.
- `frame-src https://www.entase.com` – checkout renderdatakse paneelirežiimis iframe'is.
- `connect-src https://www.entase.com` – klient kutsub lubatud checkout-režiimi määramiseks välja Entase API.

Ilma `frame-src`-ita loob paneelirežiim tühja paneeli. Ilma `connect-src`-ita režiimi tuvastamine nurjub ja iga checkout avaneb hüpikaknana.
