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-web.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:banner-shown { layer: 'first' } → avacy:ready (mount della UI prima del segnale di "pronto", non dopo).
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, storage (tipo/tecnologia di storage effettivamente in uso — es. 'cookie', utile quando la view deve mostrare la label risolta invece della sola chiave di config), language, consent, customization, glossary, stacks (stack IAB risolti, vuoto se nessun framework configura una whitelist), 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.