# A kliens telepítése

> Töltse be a client.js fájlt az Entase CDN-jéről, majd hozzon létre egy példányt. Nincs telepítendő csomag és nincs buildelési lépés.

A kliens egyetlen fájlként érkezik az Entase CDN-jéről. Nincs npm-csomag, nincs elkészítendő bundle, és nincs naprakészen tartandó függőség – mindig az aktuális verziót kapja.

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

A szkript betöltése egy globális `Entase` osztályt definiál. Önmagában semmi mást nem tesz: nem indít hálózati kéréseket, nem módosítja a DOM-ot, és nem jelenít meg semmit. Minden akkor kezdődik, amikor létrehoz egy példányt.

## Példány létrehozása

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

Hozzon létre **oldalanként egy példányt**, és használja azt újra minden eseményhez. A konstruktor egy `message` figyelőt regisztrál az ablakon, és elkezdi felderíteni, hogy a domainje milyen checkout mód használatára jogosult, ezért több példány létrehozása csak megkettőzött figyelőket és megkettőzött felderítési hívásokat jelent, előny nélkül.

Minden beállításnak van alapértelmezett értéke, így argumentumok nélkül is érvényes a `new Entase()` – de `pk` nélkül a kliens nem tudja ellenőrizni, hogy a domainje használhat-e beágyazott checkoutot, ezért mindig felugró ablakra vált vissza. Lásd: [Checkout módok](/developers/js-client/checkout-modes.md).

## A szkript aszinkron betöltése

Ha a `client.js` fájlt `async` vagy `defer` attribútummal tölti be, az osztály még nem fog létezni, amikor a beágyazott szkriptje lefut. A könyvtár betöltődés után egy `entase:ready` eseményt küld a `window` objektumon, ezért várja meg azt:

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

Fontos, hogy először a `typeof` ellenőrzés történjen: ha a szkript már befejezte a betöltést, az `entase:ready` már lefutott, így az erre való figyelés örökké várakozna.

## Takarítás

Egy egyoldalas alkalmazásban hívja meg a `destroy()` metódust, amikor a példányhoz tartozó nézet leválasztásra kerül:

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

Ez eltávolítja a kliens által regisztrált ablakfigyelőket. Egy megsemmisített példány nem használható újra – a rajta meghívott `book()` hibát naplóz, és nem tesz semmit. Hozzon létre helyette egy új példányt.

## Tartalombiztonsági szabályzat

Ha a webhelye `Content-Security-Policy` fejlécet küld, a checkouthoz a következők szükségesek:

- `script-src https://js.entase.com` – a könyvtár betöltéséhez.
- `frame-src https://www.entase.com` – a checkout panel módban iframe-ben jelenik meg.
- `connect-src https://www.entase.com` – a kliens meghívja az Entase API-ját az engedélyezett checkout mód meghatározásához.

`frame-src` nélkül a panel mód üres panelt jelenít meg. `connect-src` nélkül a mód felderítése sikertelen, és minden checkout felugró ablakként nyílik meg.
