# Installera klienten

> Läs in client.js från Entase CDN och skapa sedan en instans. Det finns inget paket att installera och inget byggsteg.

Klienten levereras från Entase CDN som en enda fil. Det finns inget npm-paket, inget paket att bygga och inget beroende att hålla uppdaterat – du får alltid den aktuella versionen.

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

När skriptet läses in definieras en global `Entase`-klass. Den gör inget annat på egen hand: inga nätverksanrop, inga DOM-ändringar, ingenting renderas. Allt börjar när du skapar en instans.

## Skapa en instans

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

Skapa **en instans per sida** och återanvänd den för varje evenemang. Konstruktorn registrerar en `message`-lyssnare i fönstret och börjar identifiera vilket kassaläge din domän får använda, så att skapa flera instanser innebär dubblerade lyssnare och dubblerade identifieringsanrop utan någon nytta.

Varje alternativ har ett standardvärde, så `new Entase()` utan argument är giltigt – men utan `pk` kan klienten inte verifiera att din domän får använda inbäddad kassa och återgår alltid till ett popup-fönster. Se [Kassalägen](/developers/js-client/checkout-modes.md).

## Läs in skriptet asynkront

Om du läser in `client.js` med `async` eller `defer` finns klassen ännu inte när ditt infogade skript körs. Biblioteket skickar en `entase:ready`-händelse på `window` när det har lästs in, så vänta på den:

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

Kontrollen med `typeof` måste göras först: om skriptet redan har lästs in har `entase:ready` redan utlösts, och om du lyssnar efter den skulle du vänta för alltid.

## Rensa upp

I en ensidesapplikation ska du anropa `destroy()` när vyn som äger instansen avmonteras:

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

Detta tar bort fönsterlyssnarna som klienten registrerade. En förstörd instans kan inte återanvändas – att anropa `book()` på den loggar ett fel och gör ingenting. Skapa i stället en ny instans.

## Säkerhetspolicy för innehåll

Om din webbplats skickar en `Content-Security-Policy`-header behöver kassan följande:

- `script-src https://js.entase.com` – för att läsa in biblioteket.
- `frame-src https://www.entase.com` – kassan renderas i en iframe i panelläget.
- `connect-src https://www.entase.com` – klienten anropar Entase API för att fastställa vilket kassaläge som är tillåtet.

Utan `frame-src` ger panelläget en tom panel. Utan `connect-src` misslyckas lägesidentifieringen och varje kassa öppnas som en popup.
