# Installere klienten

> Last inn client.js fra Entase CDN, og opprett deretter en instans. Det er ingen pakke å installere og ingen byggingstrinn.

Klienten leveres fra Entase CDN som én enkelt fil. Det er ingen npm-pakke, ingen pakke å bygge og ingen avhengighet å holde oppdatert – du får alltid den nyeste versjonen.

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

Når skriptet lastes inn, defineres en global `Entase`-klasse. Den gjør ikke noe annet på egen hånd: ingen nettverksforespørsler, ingen DOM-endringer, ingenting gjengis. Alt starter når du oppretter en instans.

## Opprette en instans

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

Opprett **én instans per side**, og bruk den på nytt for hvert arrangement. Konstruktøren registrerer en `message`-lytter på window og begynner å fastslå hvilken checkout-modus domenet ditt har tillatelse til å bruke, så hvis du oppretter flere instanser, fører det til dupliserte lyttere og dupliserte registreringskall uten noen fordel.

Alle alternativer har en standardverdi, så `new Entase()` uten argumenter er gyldig – men uten `pk` kan ikke klienten verifisere at domenet ditt kan bruke innebygd checkout, og vil alltid falle tilbake til et popup-vindu. Se [Checkout-moduser](/developers/js-client/checkout-modes.md).

## Laste inn skriptet asynkront

Hvis du laster inn `client.js` med `async` eller `defer`, finnes ikke klassen ennå når det innebygde skriptet ditt kjører. Biblioteket utløser en `entase:ready`-hendelse på `window` når det er lastet inn, så vent 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>
```

Det er viktig å sjekke `typeof` først: Hvis skriptet allerede er ferdig lastet inn, har `entase:ready` allerede blitt utløst, og det å lytte etter den ville ventet for alltid.

## Rydde opp

I en enkeltsideapplikasjon kaller du `destroy()` når visningen som eier instansen, avmonteres:

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

Dette fjerner window-lytterne som klienten registrerte. En ødelagt instans kan ikke brukes på nytt – et kall til `book()` på den logger en feil og gjør ingenting. Opprett en ny instans i stedet.

## Content Security Policy

Hvis nettstedet ditt sender en `Content-Security-Policy`-header, trenger checkouten følgende:

- `script-src https://js.entase.com` – for å laste inn biblioteket.
- `frame-src https://www.entase.com` – checkouten gjengis i en iframe i panelmodus.
- `connect-src https://www.entase.com` – klienten kaller Entase API for å fastslå den tillatte checkout-modusen.

Uten `frame-src` gir panelmodus et tomt panel. Uten `connect-src` mislykkes modusregistreringen, og hver checkout åpnes som et popup-vindu.
