Passa al contenuto principale

Lifecycle

Stato, boot programmatico e re-mount del CMP a runtime.

Method / PropertyTierSince
init(config?)13.0
reload()13.0
getData()13.0
version (property)13.0
'avacy:ready' (event)13.0

L'inizializzazione del CMP è automatica quando carichi il bundle via <script> tag con #avacy-config e core.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: false nella config inline e chiama window.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​

NameTypeDescription
configAvacyUserConfig (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-configcore.autoInitComportamento
Assenten/aBundle boota con defaults
Presente!== false (default true)Bundle boota leggendo l'inline config
Presente=== falseBundle 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​

  1. Unmount di avacy-shield, avacy-banner, avacy-cpc (qualunque sia montato).
  2. Reset dello stato UI (es. cpcOpen: false).
  3. Reinizializzazione dei provider (store, framework, language).
  4. Re-mount condizionale:
    • se il consenso salvato è ancora valido (post-merge con nuova config) → mount avacy-shield
    • altrimenti → mount avacy-banner

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​

La versione corrente di reload() è minimal (destroy + reinit con la config inline). Il refetch della config remota tramite ConfigProvider.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​


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.