# Kuidas blokeerida kolmandate osapoolte skriptid kuni nõusolekuni

> Arendaja juhend kolmandate osapoolte skriptide blokeerimiseks kuni nõusolekuni: passiivsed skriptid, aktiveerimiskood, märgendihaldurid, manused ja lekete testimine.

Source: https://cookiesh.eu/et/blog/block-scripts-until-consent  
Published: 2026-08-20

## Key takeaways

- Mittevajalikud skriptid ei tohi käivituda, seada küpsiseid ega lugeda seadme andmeid enne, kui külastaja on nõusoleku andnud.
- Brauser eirab skripti, mille tüüp on text/plain, nii et selle saab hiljem aktiveerida ilma lehte uuesti laadimata.
- JavaScriptiga lisatud skriptid käivituvad vaikimisi asünkroonselt; kui välised skriptid peavad käivituma kindlas järjekorras, määra async väärtuseks false.
- Piirata tuleb ka reasiseseid koodijuppe, iframe'e, piksleid, npm-i SDK-sid ja märgendihaldurite märgendeid, mitte ainult src-atribuudiga script-elemente.
- Kontrolli blokeerimist värskes brauseriprofiilis, vaadates enne millelegi klõpsamist võrgupäringuid ja salvestusruumi.

Kolmandate osapoolte skriptide blokeerimiseks kuni nõusolekuni tarni need kujul, mida brauser ei käivita, näiteks `<script>`-elemendina atribuudiga `type="text/plain"`, ja aktiveeri need alles pärast seda, kui külastaja on vastava kategooriaga nõustunud. Rakenda sama reeglit reasisestele koodijuppidele, iframe'idele, jälgimispikslitele ja märgendihaldurite märgenditele ning kontrolli tulemust puhtas brauseris enne millelegi klõpsamist.

## Miks peavad kolmandate osapoolte skriptid nõusolekut ootama?

Sest enamik neist salvestab külastaja seadmesse teavet või loeb seda kohe käivitumisel ning ELis nõuab see eelnevat nõusolekut. E-privaatsuse direktiivi artikli 5 lõige 3 nõuab nõusolekut seadmesse teabe salvestamiseks või sellele juurdepääsuks, välja arvatud juhul, kui see on rangelt vajalik kasutaja selgesõnaliselt soovitud teenuse osutamiseks.

Analüütika-, reklaami-, sotsiaalmeedia- ja paljud manuseskriptid seavad küpsiseid, loevad brauseri salvestusruumi või koguvad seadme omadusi kohe, kui nad käivituvad. Kohtuasjas Planet49 (C-673/17) kinnitas Euroopa Liidu Kohus, et reegel kehtib olenemata sellest, kas teave on isikuandmed, ning et eelnevalt märgitud kastid ei ole kehtiv nõusolek. Bänner, mis ilmub ajal, mil jälgijad juba töötavad, sellele standardile ei vasta.

Skriptid, mis on teenuse jaoks tõeliselt vajalikud, näiteks maksete, pettuste ennetamise või nõusolekutööriista enda omad, võivad laadida tavapäraselt; vt [mida loetakse rangelt vajalikuks küpsiseks](/et/blog/strictly-necessary-cookies).

## Kuidas blokeerida skripte enne nõusolekut?

Muuda nende atribuuti `type`. Brauserid laadivad alla ja käivitavad ainult skripte, mille `type` on JavaScripti tüüp või `module`; skripti, mis on märgitud kui `text/plain`, käsitletakse passiivsete andmetena. Jäta algsed atribuudid alles ja lisa kategooria, et sinu nõusolekukood teaks, mida aktiveerida.

```html
<!-- Passiivne: brauser neid alla ei laadi ega käivita -->
<script type="text/plain" data-consent="analytics"
        src="https://analytics.example.com/script.js"></script>

<script type="text/plain" data-consent="marketing">
  window.adPixel = window.adPixel || [];
  window.adPixel.push(['init', 'PIXEL_ID']);
</script>

<!-- Manused: hoia päris URL kuni nõusolekuni atribuudis data-src -->
<iframe data-consent="marketing"
        data-src="https://www.youtube-nocookie.com/embed/VIDEO_ID"
        title="Tootedemo" width="560" height="315"></iframe>
```

Eemalda `<noscript>`-pildivaruvariandid, mida paljud teenusepakkujate koodijupid sisaldavad. Need saadavad päringu, kui JavaScript on keelatud, ehk just siis, kui sinu bänner ilmuda ei saa, seega ei ole neid võimalik piirata.

## Kuidas blokeeritud skripte pärast nõusolekut aktiveerida?

Asenda iga passiivne skript uue `<script>`-elemendiga. Olemasoleva elemendi atribuudi `type` muutmine ei pane brauserit seda käivitama ja `innerHTML`-i kaudu lisatud skriptid ei käivitu kunagi, seega vajad uut elementi, mis on loodud funktsiooniga `document.createElement`.

```js
function activate(category) {
  document
    .querySelectorAll(`script[type="text/plain"][data-consent="${category}"]`)
    .forEach((inert) => {
      const live = document.createElement('script');
      for (const { name, value } of inert.attributes) {
        if (name !== 'type') live.setAttribute(name, value);
      }
      if (!inert.hasAttribute('async')) live.async = false; // säilita lisamise järjekord
      live.text = inert.text; // reasisene kood, kui see on olemas
      inert.replaceWith(live);
    });

  document
    .querySelectorAll(`iframe[data-consent="${category}"][data-src]`)
    .forEach((frame) => { frame.src = frame.dataset.src; });
}

// Rakenda laadimisel salvestatud valik; kutsu activate() uuesti välja oma bänneri käsitlejatest.
for (const [category, granted] of Object.entries(readStoredConsent())) {
  if (granted) activate(category);
}
```

Kolm detaili, mis panevad inimesi sageli komistama:

- **Järjekord.** JavaScriptiga lisatud välised skriptid käivituvad vaikimisi asünkroonselt, selles järjekorras, milles nende allalaadimine lõpeb. Määrang `async = false` paneb need käivituma lisamise järjekorras, mis on oluline, kui üks teek sõltub teisest.
- **Reasisesed koodijupid käivituvad kohe.** Reasisene skript käivitub kohe pärast lisamist, ootamata väliseid skripte. Enamik teenusepakkujate koodijuppe paneb oma väljakutsed järjekorda, kuni teek on laaditud, kuid kontrolli kohandatud koodi, mis eeldab, et teek on juba olemas.
- **`document.write()`.** Vanad koodijupid, mis seda kutsuvad, ei tööta pärast lehe laadimist. Asenda need teenusepakkuja asünkroonse koodijupiga.

## Millist blokeerimismeetodit peaksin kasutama?

Enamik saite kombineerib mitut meetodit, mis valitakse selle järgi, kus iga märgend asub.

| Meetod | Sobib kõige paremini | Mida jälgida |
| --- | --- | --- |
| Passiivsed `text/plain`-elemendid | Mallidesse kõvakodeeritud märgendid | Iga märgendit tuleb muuta; käivitusjärjekord |
| Nõusolekut arvestav laadija sinu enda koodis | SPA-d ja npm-ist paigaldatud SDK-d | SDK-d, mis initsialiseeruvad kohe importimisel |
| Märgendihalduri nõusolekuseaded | Meeskonnad, kes haldavad märgendeid märgendihalduris | Iga märgend vajab õiget nõusolekunõuet |
| Automaatne blokeerimine | Suured pärandsaidid paljude kõvakodeeritud märgenditega | Peab laadima sünkroonselt esimesena; võib skripte märkamata jätta või katki teha |
| Iframe'i kohatäitjad | Video-, kaardi- ja sotsiaalmeediamanused | Kohatäitja peab selgitama, mida selle laadimine tähendab |

npm-ist paigaldatud teegid ei ilmu kunagi script-elementidena, seega on väravaks sinu enda kood. Kutsu SDK `init()` välja alles pärast nõusolekut ja laadi see dünaamilise `import()`-iga, et seda enne isegi alla ei laaditaks. Seda mustrit ja seansi keskel muutuvate valikute käsitlemist kirjeldab artikkel [küpsiste nõusoleku käsitlemine üheleherakendustes](/et/blog/consent-in-single-page-apps).

Google'i märgenditel on lisavõimalus. Google Consent Mode'iga saavad märgendid laadida enne nõusolekut ja kohandada oma käitumist nõusolekusignaalide järgi, selle asemel et olla blokeeritud. Kas selline seadistus sobib sinu riskivalmidusega, on eraldi otsus; vt [Consent Mode'i põhirežiim vs. täiustatud režiim](/et/blog/basic-vs-advanced-consent-mode).

## Kuidas kontrollida, et blokeerimine töötab?

Testi nagu esmakülastaja ja kontrolli, mis tegelikult võrgus ja salvestusruumis toimub:

1. Ava sait värskes privaatses aknas piirkonnast, kus sinu bänner kuvatakse.
2. Enne millelegi klõpsamist ava DevTools ja kontrolli paneeli Network. Analüütika- või reklaamidomeenidele ei tohiks olla ühtegi päringut, välja arvatud juhul, kui oled teadlikult valinud seadistuse, mis neid saadab.
3. Kontrolli paneelil Application küpsiseid, kohalikku salvestusruumi ja seansi salvestusruumi. Olemas peaksid olema ainult rangelt vajalikud kirjed.
4. Klõpsa „Keeldu kõigist“ ja veendu, et midagi uut ei laadita ega salvestata.
5. Nõustu uues seansis korraga ühe kategooriaga ja veendu, et laaditakse ainult selle skriptid ja manused.
6. Korda testi pärast iga väljalaset, mis lisab märgendi, ja tee perioodiliselt [küpsiste audit](/et/blog/how-to-run-a-cookie-audit), et tabada märgendeid, mis on lisatud väljaspool sinu väljalaskeprotsessi.

## Kokkuvõte

Blokeerimine puudutab käivitamist, mitte ainult küpsiseid: kui mittevajalik skript juba töötab, saab see andmeid salvestada või lugeda enne, kui keegi on nõustunud. Tarni märgendid passiivsena, aktiveeri need pärast nõusolekut kategooriate kaupa, piira manuseid ja SDK-sid samamoodi ning testi puhtas brauseris. Sellised tööriistad nagu Cookiesh saavad aktiveerimisetapi automatiseerida, käivitades atribuutidega `type="text/plain" data-cookiesh="analytics"` märgistatud skriptid alles siis, kui külastaja on selle kategooriaga nõustunud.

*See artikkel on üldine teave, mitte õigusnõustamine. Oma konkreetse olukorra kohta otsuste tegemiseks pea nõu kvalifitseeritud privaatsusspetsialistiga.*

## FAQ

### Kas piisab küpsiste blokeerimisest, kui skript ise siiski laaditakse?

Tavaliselt mitte. ELi reegel hõlmab mis tahes teabe salvestamist seadmesse ja sellele juurdepääsu, mitte ainult küpsiseid, ning töötav skript võib kasutada kohalikku salvestusruumi, lugeda seadme omadusi või saata identifikaatoreid. Usaldusväärne lähenemine on skripti üldse mitte käivitada.

### Kas võin Google Tag Manageri laadida enne nõusolekut?

Paljud saidid teevad seda ja kasutavad konteineri nõusolekuseadeid, et üksikud märgendid käivituksid ainult siis, kui vastav nõusolek on antud. Kontrolli värskes brauseriprofiilis, mida konteiner ja iga märgend enne nõusolekut tegelikult teevad, selle asemel et eeldada, et seadistus on õige.

### Kas pean skripte blokeerima ka väljaspool ELi asuvate külastajate puhul?

See sõltub neile kohalduvast seadusest. Aktiivse nõusoleku reeglid, nagu ELis ja Ühendkuningriigis, nõuavad blokeerimist enne nõusolekut. California CCPA ja CPRA alusel on kohustus peamiselt loobumispõhine: pead lõpetama isikuandmete müümise või jagamise, kui külastaja sellest loobub, sealhulgas Global Privacy Controli signaali kaudu.

## Sources

- [Directive 2002/58/EC (ePrivacy Directive), EUR-Lex](https://eur-lex.europa.eu/eli/dir/2002/58/oj)
- [Euroopa Liidu Kohtu kohtuasi C-673/17 (Planet49)](https://curia.europa.eu/juris/liste.jsf?num=C-673/17)
- [EDPB Guidelines 05/2020 on consent](https://www.edpb.europa.eu/our-work-tools/our-documents/guidelines/guidelines-052020-consent-under-regulation-2016679_en)
- [MDN: Using HTTP cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)
