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.:
Script Tag (No Bundler)
Secțiune intitulată „Script Tag (No Bundler)”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. |
Themed Banner (ES Module)
Secțiune intitulată „Themed Banner (ES Module)”Pentru aplicațiile grupate (React, Vue, Svelte, Next.js etc.), importați banner-ul tematic ca modul ES:
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.
Headless Components (Full Control)
Secțiune intitulată „Headless Components (Full Control)”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 Reference
Secțiune intitulată „Component Reference”| 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. |
Layout API
Secțiune intitulată „Layout API”Î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.
Settings link
Secțiune intitulată „Settings link”<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.
Language Detection
Secțiune intitulată „Language Detection”SDK rezolvă automat limba vizitatorului folosind următoarea prioritate:
- Explicit attribute — Atributul ___ZBT_I18N_RUNTIME_BLOCK_257__ pe componentă (sau ___ZBT_I18N_RUNTIME_BLOCK_258__ pe eticheta script)
- Page language — Atributul ___ZBT_I18N_RUNTIME_BLOCK_259__ pe elementul ___ZBT_I18N_RUNTIME_BLOCK_260__, utilizând subtag-ul limbajului de bază (de ex.
frde lafr-FR) - Browser language —
navigator.languagea browserului, utilizând subtag-ul de bază - 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.
Built-in Languages
Secțiune intitulată „Built-in Languages”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.)
Forcing a Language
Secțiune intitulată „Forcing a Language”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>Matching the Page Language
Secțiune intitulată „Matching the Page Language”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);});Cum este stocat consimțământul
Secțiune intitulată „How Consent Is Stored”- Client-side: Un cookie
probo_consentstochează starea de consimțământ a vizitatorului. Cookie-ulmax-ageeste 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.
Integrations
Secțiune intitulată „Integrations”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.
Google Consent Mode
Secțiune intitulată „Google Consent Mode”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:
- La încărcare, SDK-ul trimite un apel
consent("default", ...)care setă toate tipurile de consimțământ configurate la"denied". - 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:
- Cum să configurați PostHog:GDPR, CCPA și legile globale privind confidențialitatea — setarea fără cookie-uri vs. consimțământ conștient, cu un exemplu minim de lucru pentru fiecare.
- PostHog feature flags behind a cookie banner — să evalueze steagurile numai după consimțământul analitic și
identify()și de ce Track 2 ar trebui să folosească întotdeaunacookieless_mode: "on_reject".
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.