Sari la conținut

JavaScript SDK

Referința la platforma cookie banner SDK, care acoperă script-tag, moduri de instalare tematice și fără cap, aspectulAPI, detectarea limbajului și evenimente.

@probo/cookie-banner SDK este o bibliotecă JavaScript ușoară, fără dependență, construită pe Componente Web. Renderă UI-ul de consimțământ, gestionează starea de consimțământ al vizitatorului, comunică cu platformaAPIși activează resurse terțe pe baza consimțământului.

Există trei modalități de a utiliza SDK-ul, în funcție de nevoile dvs.:

Adăugați o singură etichetă <script> la HTML – nu sunt necesare instrumente de construire:

<script
src="https://unpkg.com/@probo/cookie-banner/dist/cookie-banner.iife.js"
data-banner-id="YOUR_BANNER_ID"
data-base-url="https://your-probo-instance.com/api/cookie-banner/v1/"
data-position="bottom-left"
></script>
<!-- Required: reopen control in the header or footer -->
<probo-settings-link>Cookie settings</probo-settings-link>

Acest lucru generează automat un dialog de consimțământ complet stilat. Plasați <probo-settings-link> în antet sau footer, astfel încât vizitatorii să poată redeschide preferințele — a se vedea Settings link.

Attribute Required Description
data-banner-id Yes ID-ul bannerului dvs. de pe consola platformă
data-base-url Yes Bannerul cookie al platformeiAPIbază URL
data-position No Poziția cardului: bottom-left (default), bottom-right, bottom-center, top-left, top-right, sau top-center
data-lang No Forțați o limbă specifică (de exemplu "fr"). Când este omis, SDK-ul detectează automat din pagină sau browser. Language Detection.

Pentru aplicațiile grupate (React, Vue, Svelte, Next.js etc.), importați banner-ul tematic ca modul ES:

Terminal window
npm install @probo/cookie-banner

Înregistrați componenta și plasați-o în HTML sau șablon:

import { registerCookieBanner } from "@probo/cookie-banner";
registerCookieBanner();
<probo-cookie-banner
banner-id="YOUR_BANNER_ID"
base-url="https://your-probo-instance.com/api/cookie-banner/v1/"
position="bottom-left"
></probo-cookie-banner>
<!-- Required: reopen control in the header or footer -->
<probo-settings-link>Cookie settings</probo-settings-link>
Attribute Required Description
banner-id Yes ID-ul bannerului dvs. de pe consola platformă
base-url Yes Bannerul cookie al platformeiAPIbază URL
position No Poziția cardului: bottom-left (default), bottom-right, bottom-center, top-left, top-right, sau top-center
lang No Forțați o limbă specifică (de exemplu "fr"). Când este omis, SDK-ul detectează automat din pagină sau browser. Language Detection.

Deoarece aceasta este o componentă Web, funcționează în orice cadru. În React, JSX o tratează ca pe un element personalizat. În Vue sau Svelte, utilizați-o direct în șablon. React Integration Ghid pentru un pas complet cu un useConsent hook, setarea Next.js și declarațiile TypeScript.

See Theming pentru cum să personalizați culorile, fonturile și stilul.

Pentru acces programatic la starea de consimțământ din orice modul (nu doar DOM), consultați Consent Manager API.

Pentru un control complet asupra UI-ului de consimțământ, utilizați componentele fără cap. Acestea sunt blocuri de construcție a componentelor Web ne-stilizate pe care le compuneți și le stilizați singuri:

import { registerHeadlessComponents } from "@probo/cookie-banner/headless";
registerHeadlessComponents();

Then build your own layout:

<probo-cookie-banner-root banner-id="YOUR_BANNER_ID" base-url="BASE_URL">
<probo-banner>
<div class="my-banner">
<p data-text="banner_description">We use cookies to improve your experience.</p>
<!-- Opt-in / opt-out primary actions -->
<probo-accept-button>
<button>Accept all</button>
</probo-accept-button>
<probo-reject-button>
<button>Reject all</button>
</probo-reject-button>
<probo-customize-button>
<button>Customize</button>
</probo-customize-button>
<!-- Notice presentation (APPI, Mexico, unregulated): single dismiss -->
<probo-acknowledge-button>
<button>Got it</button>
</probo-acknowledge-button>
</div>
</probo-banner>
<probo-preference-panel>
<div class="my-preferences">
<probo-category-list>
<template>
<div class="category">
<span data-slot="name"></span>
<span data-slot="description"></span>
<probo-category-toggle>
<input type="checkbox" />
</probo-category-toggle>
</div>
<probo-cookie-list>
<template>
<div class="cookie">
<span data-slot="name"></span>
<span data-slot="type"></span>
<span data-slot="duration"></span>
</div>
</template>
</probo-cookie-list>
</template>
</probo-category-list>
<probo-save-button>
<button>Save preferences</button>
</probo-save-button>
</div>
</probo-preference-panel>
<!-- CCPA only: shown when state is privacy_choices -->
<probo-privacy-choices>
<div class="my-privacy-choices">
<probo-reject-button>
<button>Do Not Sell or Share My Personal Information</button>
</probo-reject-button>
</div>
</probo-privacy-choices>
</probo-cookie-banner-root>
<!-- Required outside the root (header or footer) -->
<probo-settings-link>Cookie settings</probo-settings-link>

Use resolveLayout / resolveBannerText să afișeze butoanele potrivite și să copieze pentru prezentarea activă (OPT_IN, OPT_OUT, sau NOTICE).

Component Description
<probo-cookie-banner-root> Elementul rădăcină. necesită banner-id și base-url. Atributul opțional lang pentru a forța o limbă. Gestionează ciclul de viață și starea clientului.
<probo-banner> Vizibilitatea urmează layout.initial_state (de exemplu, închis sub CCPA – a se vedea Settings link).
<probo-accept-button> Înfășoară un buton care înregistrează consimțământul ___ZBT_I18N_RUNTIME_BLOCK_216__.
<probo-reject-button> Înfășoară un buton care înregistrează consimțământul REJECT_ALL (opt-out / Nu vinde).
<probo-customize-button> Înfășoară un buton care deschide panoul de preferințe.
<probo-acknowledge-button> Înfășoară un buton care înregistrează ___ZBT_I18N_RUNTIME_BLOCK_221__ pentru NOTICE Prezentări (dezafectare informativă). Nu reutilizați accept-toate pentru acest lucru.
<probo-preference-panel> Container for per-category consent toggles.
<probo-privacy-choices> Opțiuni de confidențialitate CCPA suprafață (opt-out vânzare / partajare + declarație de drepturi PI sensibile). Se afișează atunci când starea este privacy_choices.
<probo-category-list> Renderă un <template> o dată pe categorie de cookie. Completează data-slot="name" și data-slot="description".
<probo-category-toggle> Conectează caseta de verificare din interiorul acesteia la starea de consimțământ a categoriei.
<probo-cookie-list> Renderă un <template> o dată pe cookie în categorie. Completează data-slot="name", data-slot="type" și data-slot="duration".
<probo-save-button> Înfășoară un buton care salvează proiectul de preferințe curent.
<probo-settings-link> Required controlul de redeschidere a header/footer. Obiectivul de clic provine de la layout.reopen_state. A se vedea Settings link.

Începând cu 0.12,APIreturnează o structură layout pe configurarea bannerului. Integratorii fără cap ar trebui să o citească în loc să se ramifice pe regulation sau consent_mode:

import {
resolveLayout,
resolveBannerText,
} from "@probo/cookie-banner"; // or "@probo/cookie-banner/headless"
document.addEventListener("probo-ready", (e) => {
const { config } = e.detail;
const layout = resolveLayout(config);
// layout.presentation: "OPT_IN" | "OPT_OUT" | "NOTICE"
// layout.initial_state / layout.reopen_state: "banner" | "panel" | "privacy_choices" | "hidden"
// layout.buttons: which actions to show
// layout.settings_link: "default" | "ccpa_privacy_choices"
const copy = resolveBannerText(config);
// copy.title, copy.description, copy.primaryButton, copy.secondaryButton?
});

Dacă layout lipsește, SDK-ul înregistrează o eroare și se întoarce la opțiunea strictă - ceea ce înseamnă că backend-ul platformei este mai vechi de probod v0.246.0Actualizarea probod atunci când vedeți acest avertisment.

<probo-settings-link> este singurul control de redeschidere. Plasați-l în antetul sau footer-ul site-ului dvs. pentru fiecare încorporat (script tag, temă sau fără cap). Dacă lipsește, SDK-ul emite un avertisment moale probo-validation - fără el vizitatorii nu pot redeschide preferințele.

<style>
/* Style the host — typography still applies after CCPA replaces the children */
probo-settings-link {
font-size: 14px;
color: #334155;
text-decoration: underline;
}
</style>
<footer>
<probo-settings-link>Cookie settings</probo-settings-link>
</footer>

Comportamentul prin prezentare / reglementare (dreptat de layout):

Presentation Typical regulations Label shown Banner on first visit Click opens
OPT_OUT (CCPA) CCPA / CPRA Întotdeauna înlocuită cu legea „Opțiunile dvs. de confidențialitate” text and official opt-out icon (English; not translated) Closed by default Privacy Choices panel (privacy_choices)
OPT_OUT (other) PIPEDA, LGPD Copiii dumneavoastră (de exemplu „Setări cookie”), sau un feedback localizat dacă este gol Closed by default Compact opt-out banner
OPT_IN GDPR, UK GDPR, FADP, … Copiii tăi, sau o cădere localizată dacă este goală Open until the visitor chooses Preference panel
NOTICE APPI, LFPDPPP, unregulated countries Copiii tăi, sau o cădere localizată dacă este goală Open (informational dismiss) Notice banner again

Atunci când a fost aplicat un semnal de opțiune de renunțare la Global Privacy Control (GPC), link-ul de setări poate afișa o mică GPC honored Blocare lângă etichetă.

Încorporarea tematică montă <probo-privacy-choices> pentru opțiunile de excludere, dar Reapariția la această suprafață este CCPA-numai (layout.reopen_state = privacy_choices). Alte regimuri de excludere redeschid banner-ul compact. Integratorii fără cap ar trebui să includă <probo-privacy-choices> atunci când acceptă CCPA. Link-ul de setări găsește automat rădăcina banner-ului pentru toate cele trei metode de integrare.

Stilul probo-settings-link însuși pentru dimensiunea și culoarea fontului – nu copii interni. Sub CCPA, SDK-ul înlocuiește copiii, dar stilurile gazdă se aplică în continuare. Icoana își păstrează culorile albastru/alb și scale cu 1em.

SDK rezolvă automat limba vizitatorului folosind următoarea prioritate:

  1. Explicit attribute — Atributul ___ZBT_I18N_RUNTIME_BLOCK_257__ pe componentă (sau ___ZBT_I18N_RUNTIME_BLOCK_258__ pe eticheta script)
  2. Page language — Atributul ___ZBT_I18N_RUNTIME_BLOCK_259__ pe elementul ___ZBT_I18N_RUNTIME_BLOCK_260__, utilizând subtag-ul limbajului de bază (de ex. fr de la fr-FR)
  3. Browser language — navigator.language a browserului, utilizând subtag-ul de bază
  4. Default language — Limba implicită a banner-ului configurată în consolă (default la en)

Limba rezolvată este trimisă laAPIatunci când se colectează configurația bannerului.APIreturnează toate textul UI, numele categoriilor și descrierile în limba rezolvată. Dacă nu există traducere pentru acea limbă,APIrevine la limba implicită a bannerului.

Noile bannere includ traduceri pentru aceste limbi:

Code Language Code Language
en English nl Dutch
de German pl Polish
es Spanish pt Portuguese
fr French tr Turkish
id Indonesian uk Ukrainian
it Italian zh Chinese
ja Japanese
ko Korean

Puteți personaliza aceste traduceri și puteți adăuga noi limbi din consola de platformă.

  • Titlul și descrierea bannerului (inclusiv variantele de excludere și notificare)
  • Etichete de buton (acceptați toate, respingeți toate, personalizați, salvați, respingeți / recunoașteți)
  • Preference panel title and description
  • Cookie detail labels (type, description, duration)
  • ARIA accessibility labels
  • Privacy policy / cookie policy link text
  • Textul de localizare a conținutului (se afișează atunci când resursele sunt blocate)
  • Duration labels (years, months, days, persistent, etc.)

Pentru a renunța la auto-detectare, setați limba în mod explicit:

Script tag:

<script
src="https://unpkg.com/@probo/cookie-banner/dist/cookie-banner.iife.js"
data-banner-id="YOUR_BANNER_ID"
data-base-url="https://your-probo-instance.com/api/cookie-banner/v1/"
data-lang="de"
></script>

Themed banner:

<probo-cookie-banner
banner-id="YOUR_BANNER_ID"
base-url="https://your-probo-instance.com/api/cookie-banner/v1/"
lang="de"
></probo-cookie-banner>

Headless components:

<probo-cookie-banner-root
banner-id="YOUR_BANNER_ID"
base-url="https://your-probo-instance.com/api/cookie-banner/v1/"
lang="de"
>
<!-- ... -->
</probo-cookie-banner-root>

Dacă pagina dvs. are un atribut lang pe elementul ___ZBT_I18N_RUNTIME_BLOCK_287__, SDK îl selectează automat:

<html lang="fr"></html>

Aceasta este abordarea recomandată pentru site-urile multilingve care au setat deja atributul lang ca parte a setării lor i18n.

SDK emite evenimente personalizate care bulează prin DOM. Ascultați elementul rădăcină sau orice strămoș:

Event Detail Description
probo-ready { config, gpcApplied, regulation } Într-adevăr, în cazul în care este necesar să se îndeplinească cerințele prevăzute de legislația națională în materie de protecție a datelor cu caracter personal, trebuie să se prevadă că, în cazul în care este necesar, este necesar să se îndeplinească cerințele prevăzute de legislația națională în materie de protecție a datelor cu caracter personal. default_language, texts, cookie_policy_url, gpcApplied, gpcApplied
probo-state { state, prev } Starea: loading, banner, panel, privacy_choices, hidden.
probo-consent { action, consent_data } Acțiuni: ACCEPT_ALL, REJECT_ALL, CUSTOMIZE, GPC, ACKNOWLEDGE.
probo-validation { missing } Soft composition warning (e.g. missing <probo-settings-link>). Does not block load.
document.addEventListener("probo-consent", (e) => {
console.log("Consent action:", e.detail.action);
});
Secțiune intitulată „How Consent Is Stored”
  • Client-side: Un cookie probo_consent stochează starea de consimțământ a vizitatorului. Cookie-ul max-age este setat la expirarea consimțământului configurat pe banner (în zile). Acesta utilizează SameSite=Lax.
  • Server-side: Fiecare acțiune de consimțământ este înregistrată prin intermediul platformeiAPIcu versiunea banner, ID-ul vizitatorului, tipul de acțiune, adresa IP anonimizată și agentul de utilizator. adresele IP sunt anonimizate înainte de stocare (IPv4 ultimul octet zero, IPv6 mascat la /48) – IP-ul complet nu persistă niciodată. Audit Trail pentru lista completă a câmpurilor stocate.
  • Visitor identity: SDK-ul generează un ID aleator al vizitatorului și îl stochează în localStorage. Acest ID este utilizat pentru a căuta consimțământul existent atunci când vizitatorul se întoarce.
  • Offline resilience: În cazul în careAPIeste inaccesibil atunci când este înregistrat consimțământul, solicitarea este coadă în localStorage și retrasă automat la următoarea încărcare a paginii.

SDK-urile sunt dotate cu integrări încorporate care sincronizează automat statutul de consimțământ cu serviciile terțelor părți. Integrările sunt activate în mod implicit – acestea sunt activate numai atunci când sunt configurate steagurile corespunzătoare pe categoriile de cookie-uri din consola platformei.

The SDK pushes Google Consent Mode v2 semnale către gtag() sau dataLayer, păstrând etichetele Google în sincronizare cu consimțământul vizitatorului.

How it works:

  1. La încărcare, SDK-ul trimite un apel consent("default", ...) care setă toate tipurile de consimțământ configurate la "denied".
  2. Atunci când vizitatorul face o alegere, SDK-ul trimite un apel consent("update", ...) cu "granted" sau "denied" pentru fiecare tip de consimțământ pe baza alegerilor per categorie ale vizitatorului.

Configurarea este condusă de GCM consent types pe fiecare categorie de cookie-uri din consola de platformă. Mapă categorii la tipuri de consimțământ Google, cum ar fi analytics_storage, ad_storage, ad_user_data, sau ad_personalization. Categoriile fără tipuri de consimțământ GCM sunt ignorate.

Integrarea detectează window.gtag sau window.dataLayer în mod automat.

PostHog nu este sincronizat automat de către SDK – dar Consent Manager API vă oferă tot ce aveți nevoie pentru a vă conecta în câteva rânduri și pentru a respectaGDPR, CCPA și celelalte reglementări pe care le gestionează banner-ul.

See the dedicated guides:

O integrare completă a funcționării (inclusiv o demonstrație a drapelului caracteristicii cu consimțământ) trăiește în cookie-banner-react example.

Ultima actualizare: