# Instalace klienta

> Načtěte client.js z CDN Entase a poté vytvořte instanci. Není třeba instalovat žádný balíček ani provádět krok sestavení.

Klient se z CDN Entase dodává jako jediný soubor. Neexistuje žádný balíček npm, žádný bundle k sestavení ani žádná závislost, kterou by bylo nutné udržovat aktuální – vždy získáte aktuální verzi.

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

Načtením skriptu se definuje globální třída `Entase`. Samo o sobě nedělá nic dalšího: žádné síťové požadavky, žádné změny DOM, nic se nevykresluje. Vše začíná až vytvořením instance.

## Vytvoření instance

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

Vytvořte **jednu instanci na stránku** a používejte ji pro každou událost. Konstruktor zaregistruje ve window listener `message` a začne zjišťovat, který režim checkoutu smí vaše doména používat, takže vytvoření několika instancí znamená duplicitní listenery a duplicitní volání detekce bez jakéhokoli přínosu.

Každá možnost má výchozí hodnotu, takže `new Entase()` bez argumentů je platné – bez `pk` však klient nemůže ověřit, že vaše doména smí používat vložený checkout, a vždy se vrátí k vyskakovacímu oknu. Viz [Režimy checkoutu](/developers/js-client/checkout-modes.md).

## Asynchronní načítání skriptu

Pokud `client.js` načítáte pomocí `async` nebo `defer`, třída při spuštění vašeho inline skriptu ještě nebude existovat. Knihovna po načtení vyvolá ve `window` událost `entase:ready`, proto na ni počkejte:

```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>
```

Nejprve je důležitá kontrola `typeof`: pokud se skript již načetl, událost `entase:ready` už byla vyvolána a čekání na ni by trvalo navždy.

## Úklid

V jednostránkové aplikaci zavolejte `destroy()`, když se odpojí pohled, kterému instance patří:

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

Tím se odstraní listenery ve window, které klient zaregistroval. Zničenou instanci nelze znovu použít – volání `book()` na ní zapíše chybu do logu a nic neudělá. Místo toho vytvořte novou instanci.

## Zásady zabezpečení obsahu

Pokud váš web odesílá hlavičku `Content-Security-Policy`, checkout potřebuje:

- `script-src https://js.entase.com` – pro načtení knihovny.
- `frame-src https://www.entase.com` – checkout se v režimu panelu vykresluje v iframe.
- `connect-src https://www.entase.com` – klient volá API Entase, aby zjistil povolený režim checkoutu.

Bez `frame-src` vytvoří režim panelu prázdný panel. Bez `connect-src` se detekce režimu nezdaří a každý checkout se otevře jako vyskakovací okno.
