Lifecycle
Stato, boot programmatico e re-mount del CMP a runtime.
| Method / Property | Tier | Since |
|---|---|---|
init(config?) | 1 | 3.0 |
reload() | 1 | 3.0 |
getData() | 1 | 3.0 |
version (property) | 1 | 3.0 |
'avacy:ready' (event) | 1 | 3.0 |
L'inizializzazione del CMP è automatica quando carichi il bundle via
<script>tag con#avacy-configecore.autoInit !== false: il bundle legge la config inline, fetcha la config remota se configurata, monta i provider e gli elementi UI.Per controllo programmatico sul boot (timing custom, SPA, animazioni di ingresso, test) → setta
core.autoInit: falsenella config inline e chiamawindow.Avacy.init()quando vuoi.
init
Boot programmatico del CMP. Usato quando #avacy-config porta core.autoInit: false e l'integratore vuole controllare il momento del boot (animazioni, config async, gating SPA, test).
window.Avacy.init(config?: AvacyUserConfig): Promise<void>
Parameters
| Name | Type | Description |
|---|---|---|
config | AvacyUserConfig (opzionale) | Config da fondere sopra l'inline #avacy-config block. Shallow-merged (nested buckets come core, store, ui vengono sovrascritti interi, non merged più in profondità). |
Auto-init gating
#avacy-config | core.autoInit | Comportamento |
|---|---|---|
| Assente | n/a | Bundle boota con defaults |
| Presente | !== false (default true) | Bundle boota leggendo l'inline config |
| Presente | === false | Bundle non boota — l'integratore deve chiamare init() |
Example
<script type="application/json" id="avacy-config">
{ "core": { "autoInit": false }, "publisherCountryCode": "IT", "language": "it",
"frameworks": [{ "tcf": { "cmpId": 297, "frameworkVersion": 2, "vendors": "all" } }] }
</script>
<script src="https://cdn.avacy.com/cmp-web/latest/cmpweb.esm.js" type="module"></script>
<script>
document.addEventListener('hero:animation-done', () => {
window.Avacy.init(); // boot now
});
</script>
// Override programmatico parziale (es. lingua diversa post-fetch):
await window.Avacy.init({ language: 'en' });
⚠️ Caveat: gating dei vendor
Posticipare l'init del CMP significa posticipare il consent gate. I vendor (Google Analytics, Meta Pixel, third-party SDK) che si inizializzano prima che init() abbia risolto non vedono il consenso, leggono lo stub __tcfapi o lo dataLayer vuoto, e possono tracciare in modo non conforme GDPR.
Se l'integrator usa autoInit: false, è sua responsabilità non istanziare vendor prima che init() risolva (o usare avacy:ready come gate per il loro mount).
reload
Distrugge e rimonta tutto il CMP partendo dalla config corrente: reinizializza i provider, rimonta gli elementi UI. Non azzera il consenso salvato (quello resta nello store).
window.Avacy.reload(): Promise<void>
Behavior
- Unmount di
avacy-shield,avacy-banner,avacy-cpc(qualunque sia montato). - Reset dello stato UI (es.
cpcOpen: false). - Reinizializzazione dei provider (store, framework, language).
- Re-mount condizionale:
- se il consenso salvato è ancora valido (post-merge con nuova config) → mount
avacy-shield - altrimenti → mount
avacy-banner
- se il consenso salvato è ancora valido (post-merge con nuova config) → mount
Emette in sequenza: avacy:banner-hidden { reason: 'destroy' } → avacy:ready → avacy:banner-shown { layer: 'first' }.
Example
// dopo un cambio di policy lato CMS che richiede un nuovo consenso:
await window.Avacy.reload();
// cambio lingua + re-mount per applicare label aggiornate:
await window.Avacy.changeLanguage('en');
await window.Avacy.reload();
When to use it
- Hot-reload della config dopo che il CMS pubblica una versione nuova della policy
- Test/preview in cui resetti il consenso programmaticamente e vuoi ri-mostrare il banner
- Integrazioni SPA che cambiano vista privacy-sensibile
When NOT to use it
- Cambio del consenso → usa
triggerConsentoupdateConsent(non serve reload) - Solo cambio lingua →
changeLanguageè sufficiente se non vuoi rimontare tutto
La versione corrente di
reload()è minimal (destroy + reinit con la config inline). Il refetch della config remota tramiteConfigProvider.refetch()+CoreContext.reinit()è una core touchpoint tracciata fuori da questa preview.
getData
Ritorna uno snapshot read-only dei dati del CMP a un istante: config, consent, language, UI state, customization, glossary.
window.Avacy.getData(): Readonly<CmpData> | null
Ritorna null se il CMP non è ancora inizializzato.
Return shape
type CmpData = ContextData & {
ui: { cpcOpen: boolean };
};
ContextData è il bucket interno del core con core, config, language, consent, customization, glossary, decodedConsent?, acmAddtlConsent?.
→ Vedi CmpData in Tier 2 per i type dettagliati.
Example
const data = window.Avacy.getData();
if (data?.consent.ready && data.consent.valid) {
console.log('saved type:', data.consent.type);
}
console.log('CPC currently open?', data?.ui.cpcOpen ?? false);
See also
getConsent()— proiezione user-friendly del soloconsentCmpData— shape completa
version
Stringa con la versione del bundle (semver). Utile per debug e per matrici di compat clienti.
window.Avacy.version: string // e.g. "3.0.0"
console.log('Avacy CMP', window.Avacy.version);
Event: avacy:ready
Emesso una volta, dopo che l'init del CMP ha completato e l'UI è (eventualmente) mountata. Rie-emesso dopo ogni reload().
document.addEventListener('avacy:ready', () => {
console.log('Avacy ready', window.Avacy.version);
});
È sicuro registrare il listener dopo che il bundle ha caricato: i DOM event listener tardivi non perdono l'evento se sono registrati prima dell'effettivo dispatch (e il dispatch avviene a fine boot). Però se hai necessità di setup pre-boot, registra il listener nell'
<head>prima del bundle script.