# Fra dawa-autocomplete2 til Danadresse

> Behold DAWA's autocomplete-widget, skift script-adressen og tilføj en domænelåst browsernøgle, så adressefeltet virker igen.
>
> https://danadresse.dk/guides/migrer-dawa-autocomplete2 · verified 2026-11-02
Mange sider brugte DAWA's widget `dawa-autocomplete2` direkte fra `dawa.aws.dk` eller `cdn.dataforsyningen.dk`. De filer forsvandt, da DAWA lukkede 1. oktober 2026, og adressefeltet holdt op med at foreslå adresser.

Vi serverer den samme widget (version 1.1.0, MIT-licens) på de samme stier under `api.danadresse.dk`. Din initialiseringskode og din CSS kan blive, som de er. Du skifter domænet i `<script src>` og giver widgetten en nøgle.

## 1. Opret en browsernøgle

Nøglen står i sidens HTML, så alle besøgende kan se den. Brug derfor en nøgle, der er låst til dine domæner:

1. Åbn [Nøgler](/dashboard/keys) og opret en *live*-nøgle til websitet.
2. Fold **Tilladte domæner** ud på nøglen og skriv dine domæner, fx `firma.dk, www.firma.dk`. `*.firma.dk` dækker kun underdomæner, ikke `firma.dk` selv. `localhost` er tilladt til udvikling.
3. Gem. En nøgle kan have op til 40 domæner.

En låst nøgle svarer kun, når browserens `Origin` (eller `Referer`) matcher et af domænerne. Hver besøgende kan lave 120 kald i minuttet, så én besøgende ikke kan bruge hele din kvote. Detaljerne står i [Browsernøgler og tilladte domæner](/guides/browser-noegler-domaener).

Bruger du en ulåst nøgle i en offentlig side, bliver den set fra mange IP-adresser. Det ligner en lækket nøgle, og den kan blive spærret (`403 key_blocked`).

## 2. Skift script-adressen

Erstat domænet og sæt nøglen på som `?key=`:

```html id=script-tag run=no
<!-- Før -->
<script src="https://dawa.aws.dk/js/autocomplete/dawa-autocomplete2.min.js"></script>

<!-- Efter -->
<script src="https://api.danadresse.dk/js/autocomplete/dawa-autocomplete2.min.js?key=dawa_live_din_browsernøgle"></script>
```

Disse stier virker:

| DAWA-sti | Danadresse |
|---|---|
| `dawa.aws.dk/js/autocomplete/dawa-autocomplete2.min.js` | `api.danadresse.dk/js/autocomplete/dawa-autocomplete2.min.js` |
| `dawa.aws.dk/js/autocomplete/dawa-autocomplete2.js` | `api.danadresse.dk/js/autocomplete/dawa-autocomplete2.js` |
| `cdn.dataforsyningen.dk/dawa/assets/dawa-autocomplete2/<version>/…` | `api.danadresse.dk/dawa/assets/dawa-autocomplete2/<version>/…` |
| CSS | `api.danadresse.dk/css/dawa-autocomplete2.css` |

Alle versionsnumre på CDN-stien giver den samme 1.1.0-build. Widgettens options er uændrede siden 1.0.

Widgetten finder nøglen ét af disse steder, i denne rækkefølge: `params.api_key`, `apiKey`-option, `data-api-key` på script-tagget eller `?key=` (eller `?api_key=`) på script-adressen. Den sender den som `api_key` på hvert kald. `?key=` kræver et klassisk `<script>`-tag; som ES-modul kan widgetten ikke læse sit eget tag, så brug `apiKey` i stedet.

## 3. Behold din initialisering

Koden, der kobler widgetten på dit felt, skal ikke ændres:

```html id=widget-init run=no
<link rel="stylesheet" href="https://api.danadresse.dk/css/dawa-autocomplete2.css">

<div class="autocomplete-container">
  <input type="search" id="adresse" autocomplete="off">
</div>

<script src="https://api.danadresse.dk/js/autocomplete/dawa-autocomplete2.min.js?key=dawa_live_din_browsernøgle"></script>
<script>
  dawaAutocomplete.dawaAutocomplete(document.getElementById("adresse"), {
    debounce: 200,
    select: function (valgt) {
      // valgt.data.id er adressens UUID – gem den sammen med teksten
      document.getElementById("adresse-id").value = valgt.data.id;
    }
  });
</script>
<input type="hidden" id="adresse-id" name="adresse_id">
```

Options, som widgetten understøtter: `select`, `type` (`adresse`, `adgangsadresse` eller `vejnavn`), `adgangsadresserOnly`, `params` (fx `{ kommunekode: "0101" }` eller `{ postnr: "8000" }`), `fuzzy`, `minLength`, `debounce`, `id` (forudfyld feltet med en gemt adresse), `multiline` og `baseUrl`. Filtrene i `params` (`postnr`, `kommunekode`) indsnævrer forslagene.

Tolerance over for stavefejl virker som i DAWA: widgetten sender `fuzzy=` som standard, hvilket slår den til, og `fuzzy: false` udelader parameteren, hvilket slår den fra.

Sæt `debounce`. Uden den laver widgetten ét kald pr. tastetryk. Med `debounce: 200` venter den, til brugeren holder en kort pause.

Forudfyldning med `id` virker også med nøgle: vores build sender nøglen med på det kald, som den oprindelige widget lavede uden parametre.

## 4. Test det

Åbn siden, skriv et par bogstaver og kig i browserens udviklerværktøj under *Network*. Du skal se kald til `https://api.danadresse.dk/autocomplete?…&api_key=…` med status 200.

Det er det samme kald, som widgetten laver. Du kan prøve det fra terminalen:

```bash id=widget-request run=live expect="caretpos"
curl -s "https://api.danadresse.dk/autocomplete?q=R%C3%A5dhuspladsen%201&type=adresse&caretpos=15&supplerendebynavn=true&stormodtagerpostnumre=true&multilinje=true&fuzzy=" \
  -H "X-Api-Key: $DANADRESSE_API_KEY"
```

Tester du en domænelåst nøgle fra terminalen, skal du tilføje `-H "Origin: https://firma.dk"` med et af nøglens domæner. Ellers får du `403 origin_not_allowed`.

Fejl, du kan møde:

| Status og kode | Betydning | Løsning |
|---|---|---|
| `401 missing_api_key` | Widgetten fandt ingen nøgle | Tjek `?key=` på script-adressen, eller brug `apiKey` |
| `401 invalid_api_key` | Nøglen findes ikke eller er tilbagekaldt | Kopiér nøglen igen fra [Nøgler](/dashboard/keys) |
| `403 origin_not_allowed` | Sidens domæne er ikke på nøglens liste | Tilføj domænet under **Tilladte domæner** (husk både `firma.dk` og `www.firma.dk`) |
| `429 rate_limit_per_visitor` | Én besøgende har lavet for mange kald i minuttet | Sæt `debounce` |

Når et kald fejler, skriver widgetten `DAWA request failed` i konsollen og prøver igen efter et halvt sekund. Ser du den linje gentage sig, så kig på statuskoden i *Network*.

## Næste skridt

- Vil du hellere bruge vores egen widget? Se [Autocomplete-widget i ren JavaScript](/guides/vanilla-autocomplete-widget).
- Skal du også flytte serverkald? [Skift fra DAWA ved at ændre base-URL'en](/guides/migrer-fra-dawa).
