Come configurare correttamente Chrome Storage Sync

Importante: chrome.storage.sync funziona solo se l’utente è connesso a Chrome con un account Google, Chrome è online e la sincronizzazione è attivata. Quando la sincronizzazione è disattiva o il browser è offline, i dati restano locali e vengono inviati quando la connessione torna.
Perché usare chrome.storage invece di localStorage
- chrome.storage accetta oggetti complessi. localStorage lavora solo con stringhe.
- chrome.storage è asincrono. Questo migliora reattività e performance dell’estensione o della pagina.
- chrome.storage.sync replica dati su altri dispositivi con lo stesso account Google.
Definizione rapida: chrome.storage.sync - API che sincronizza chiavi/valori fra istanze di Chrome dell’utente; chrome.storage.local - storage locale dell’installazione.
Sommario delle differenze (in breve)
- chrome.storage.sync: asincrono, oggetti, sincronizzazione cloud, limiti di quota e politiche di conflitto.
- chrome.storage.local: asincrono, oggetti o stringhe (ma meno vincoli di quota), dati confinati alla macchina.
- localStorage (window.localStorage): sincrono, solo stringhe, uso più semplice ma blocca il thread principale.
Glossario 1 linea
- Sync: sincronizzazione automatica dei dati fra dispositivi.
- Manifest: file JSON che descrive un’estensione Chrome e le sue autorizzazioni.
- Quota: limite di spazio per chrome.storage.sync o chrome.storage.local.
Come settare e usare chrome.storage (esempi pratici)
Esempio minimo in un’estensione Manifest V3 (manifest.json):
{
"manifest_version": 3,
"name": "Esempio Storage",
"version": "1.0",
"permissions": ["storage"],
"background": {"service_worker": "background.js"}
}
Note: il permesso storage è necessario per usare chrome.storage dalle parti dell’estensione che lo richiedono.
Esempi di API comuni (background.js o content script):
// Salvare un oggetto in chrome.storage.sync
chrome.storage.sync.set({
userSettings: { theme: 'dark', fontSize: 14 }
}, function() {
console.log('Impostazioni salvate.');
});
// Leggere i dati
chrome.storage.sync.get(['userSettings'], function(result) {
console.log('Impostazioni recuperate', result.userSettings);
});
// Usando Promise (API moderna con chrome.* promissified o in MV3 tramite chrome.storage.*.then)
async function saveSettings(settings) {
await chrome.storage.sync.set({ userSettings: settings });
}
Consiglio: per funzioni asincrone, preferisci Promise/async-await per codice più leggibile e meno soggetto a callback hell.
Quando chrome.storage.sync non funziona: cause comuni e rimedi
Sintomi tipici:
- chrome.storage.sync.set non salva valori o non restituisce risultato immediato
- valori mancanti su altri dispositivi
- conflitti di sincronizzazione o errori “sync error”
Controlli rapidi:
- Verifica il permesso “storage” nel manifest
- Verifica che l’utente sia loggato in Chrome con account Google
- Controlla che la sincronizzazione sia attiva in Chrome > Impostazioni > Sincronizzazione
- Assicurati che Chrome sia online
- Controlla i limiti di quota (la documentazione ufficiale specifica i limiti attuali)
Diagnosi e azioni:
- Usa le callback o le Promise per attendere il completamento della set/get
- Se riscontri errori di sincronizzazione, esegui Reset sync in Chrome (Impostazioni > Sincronizzazione e servizi Google > Gestisci sincronizzazione > Reset)
- Se i dati non si salvano, prova a usare chiavi variabili o a serializzare l’oggetto prima del salvataggio
- Verifica conflitti: se due dispositivi scrivono contemporaneamente, l’ultima scrittura vince oppure Chrome applica regole interne; prevedi merge lato applicazione quando necessario
- Se necessario, usa chrome.storage.local come cache temporanea e poi sincronizza manualmente quando lo stato di rete lo consente
Differenze fra storage, cookies e cache (tabella localizzata)
Voce | Uso | Dimensione | Sicurezza |
---|---|---|---|
Storage vs Cookie | I cookie vengono inviati al server tramite richieste HTTP. Lo storage è pensato per letture client-only. Lo storage resta nel browser e non viene inviato al server automaticamente. | I cookie tipicamente hanno un limite di ~4 KB. Lo storage locale è molto più capiente. | Nessuno è intrinsecamente sicuro al 100%. Entrambi possono essere vulnerabili a XSS. Evitare di salvare informazioni sensibili senza cifratura adeguata. |
Storage vs Cache | La cache è un backup temporaneo per accelerare il caricamento di risorse. Lo storage è una soluzione di persistenza a lungo termine. | La cache lavora a livello di byte; lo storage usa blocchi/chiavi per dati strutturati. | Anche la cache può essere sfruttata da script malevoli. Non memorizzare segreti in chiaro. |
Nota: evitare di memorizzare password in chiaro né altri dati sensibili. Per segreti, preferire soluzioni server-side o keychain del sistema quando possibile.
Dove sono memorizzati i dati (per utente)
Chrome salva i dati del profilo utente nella cartella profilo. Su Windows tipico percorso:
AppData\Local\Google\Chrome\User Data\Default\Local Storage
Questo percorso contiene vari file di storage; non modificare manualmente i file mentre Chrome è in uso.
Gestione pratica dello storage in Chrome (passo passo per utenti)
1) Cancellare i dati di navigazione
- Apri Chrome.
- Clic sui tre puntini verticali > Altri strumenti > Cancella dati di navigazione.
- Scegli intervallo di tempo e tipi di dati da cancellare.
- Clicca “Cancella dati”.
Suggerimento: scorciatoia Ctrl+Shift+Delete per Windows.
2) Cancellare tutti i dati di siti specifici (Impostazioni avanzate)
- Apri Chrome > Impostazioni > Privacy e sicurezza > Impostazioni sito > Visualizza autorizzazioni e dati memorizzati nei siti.
- Clic su “Cancella tutti i dati” per rimuovere i dati memorizzati da tutti i siti.
- Oppure gestisci i singoli siti e rimuovi quello che serve.
3) Cancellare localStorage via Developer Tools (sviluppatori)
- Apri DevTools > Application.
- Espandi Local Storage > seleziona il sito > click destro > Clear.
Questo elimina localStorage per il dominio selezionato.
Playbook di configurazione per sviluppatori (SOP breve)
- Aggiungi “storage” a manifest.json.
- Testa sul canale di sviluppo con un profilo Chrome di prova.
- Implementa salvataggio con Promise e fallback su local.
- Gestisci conflitti con merge policy esplicita.
- Documenta limiti di quota e pulizia periodica dei dati.
- Fornisci UI per il reset dei dati e per esportare/importare preferenze.
Esempio di strategia di fallback:
- Prima prova a salvare su chrome.storage.sync
- Se set fallisce per quota, serializza e sposta su chrome.storage.local
- Avvisa l’utente se ci sono dati non sincronizzati
Checkpoint di conformità e sicurezza (breve lista)
- Non memorizzare dati sensibili in chiaro.
- Prevedi cifratura lato client per informazioni sensibili se necessario.
- Limita la quantità di dati sincronizzati; documenta le dimensioni per gli utenti.
- Fornisci opzioni per cancellare o esportare i dati.
- Notifica l’utente sulla sincronizzazione e richieste di permessi.
Incident runbook: sincronizzazione fallita
- Verifica stato account Google e login.
- Controlla impostazioni di sincronizzazione in Chrome.
- Controlla errori console e DevTools in background/service_worker.
- Esegui Reset sync se necessario per forzare un riavvio della sincronizzazione.
- Se persistono errori, estrai i dati locali in un file JSON per diagnostica.
- Contatta il supporto con i log e i passi per riprodurre l’errore.
Casi di test e criteri di accettazione (esempi)
- TC-01: salvataggio di un oggetto complesso in sync deve restituire callback senza errori.
- TC-02: dopo salvataggio su dispositivo A, il dispositivo B deve ricevere i dati entro un lasso di tempo ragionevole quando è online e loggato.
- TC-03: quando sync è disabilitato, i dati rimangono in local ma non vengono inviati al cloud.
- TC-04: Reset sync rimuove i dati remoti ma conserva local fino a rimozione manuale.
Criterio di successo: tutti i test passano su almeno due profili di Chrome distinti.
Esempi di snippet e cheat sheet
Salvataggio singolo:
chrome.storage.sync.set({ key: value }, () => {
if (chrome.runtime.lastError) {
console.error('Errore salvataggio:', chrome.runtime.lastError);
} else {
console.log('Salvataggio completato.');
}
});
Lettura multipla con Promise:
function getKeys(keys) {
return new Promise((resolve) => {
chrome.storage.sync.get(keys, (items) => resolve(items));
});
}
await getKeys(['userSettings', 'tokens']);
Rimozione:
chrome.storage.local.remove('keyToRemove', () => {
console.log('Chiave rimossa.');
});
chrome.storage.local.clear(() => console.log('Local storage pulito.'));
Quando chrome.storage.sync non è la scelta giusta (controesempi)
- App che devono salvare grandi blob binari o dati molto voluminosi: meglio usare storage esterno o server-side.
- Dati strettamente sensibili che richiedono compliance specifiche: preferire gestione server-side e sistemi cifrati dedicati.
- Situazioni in cui l’utente non usa mai l’account Google o non abilita la sincronizzazione: non fare affidamento esclusivo su sync.
Migrazione e compatibilità
- Manifest V2 vs V3: assicurati che la tua estensione sia aggiornata a Manifest V3 per le nuove policy e service worker.
- Versioni di Chrome: la API è maturata nel tempo. Testa su canali Stable e Beta.
- Strategie di migrazione: esporta preferenze in JSON e prevedi import automatico alla nuova versione.
Privacy e note GDPR (se raccogli dati degli utenti)
- Se memorizzi dati personali, informa l’utente e fornisci un meccanismo per accesso, rettifica e cancellazione.
- Non memorizzare più dati del necessario. Minimizza e anonimizza quando possibile.
- Documenta la base giuridica per il trattamento dei dati (consenso, esecuzione contratto, ecc.).
Nota legale: queste sono indicazioni generali, non consulenza legale. Per conformità approfondita, consultare un legale specializzato.
Decision tree per scegliere tra sync e local (Mermaid)
flowchart TD
A[Hai bisogno di sincronizzazione fra dispositivi?] -->|Sì| B{L'utente usa account Google e abilita sync?}
A -->|No| C[Usa chrome.storage.local]
B -->|Sì| D[Usa chrome.storage.sync con limiti di quota]
B -->|No| E[Usa chrome.storage.local + offri export/import]
D --> F{Dati sensibili?}
F -->|Sì| G[Evita sync per dati sensibili; valuta cifratura o server-side]
F -->|No| H[Implementa sync e strategie di merge]
Role-based checklist (Sviluppatore / Admin / Utente finale)
Sviluppatore:
- Aggiungi permesso storage al manifest.
- Gestisci errori con lastError.
- Implementa fallback e test end-to-end.
- Documenta limiti di quota.
Amministratore IT:
- Stabilire policy aziendali per sincronizzazione dei dati.
- Monitorare i profili gestiti e le impostazioni di sincronizzazione.
- Fornire istruzioni per reset o forzare aggiornamenti.
Utente finale:
- Verificare di essere loggato in Chrome.
- Attivare sincronizzazione in Impostazioni.
- Usare le opzioni di privacy per cancellare dati quando necessario.
Suggerimenti pratici e scorciatoie
- Usa Ctrl+Shift+Delete per cancellare i dati di navigazione velocemente.
- In DevTools, Application > Local Storage per ispezionare/elimnare chiavi.
- Fornisci opzione di esportazione/importazione preferenze per evitare perdita di dati durante migrazioni.
Rischi principali e mitigazioni
- Rischio: XSS che legge localStorage. Mitigazione: sanitizza input, Content Security Policy, evita memorizzare segreti.
- Rischio: superamento quota sync. Mitigazione: limitare dimensione degli oggetti, usare compressione o spostare su local.
- Rischio: conflitti multi-dispositivo. Mitigazione: implementa merge intelligente e policy di ultima modifica.
Esempio pratico: debug di chrome.storage.sync.set non funzionante
Passi:
- Controlla console per chrome.runtime.lastError dopo la set.
- Verifica permessi in manifest.json.
- Prova a salvare un oggetto minimale (es. {test: 1}) per escludere problemi di serializzazione.
- Testa con un profilo Chrome differente per escludere problemi locali di profilo.
- Se persistono errori, esegui Reset sync e riprova.
Mini metodologia per implementare storage in un progetto
- Analisi: quali dati devono essere persistiti e perché.
- Decisione: sync, local o server-side.
- Implementazione: API chrome.storage con Promise, gestione errori.
- Test: unit test, E2E su più profili.
- Monitor: log di errori e metri di fallback.
Esempio di export/import JSON per preferenze utente
// Export
chrome.storage.sync.get(null, (items) => {
const blob = new Blob([JSON.stringify(items)], { type: 'application/json' });
const url = URL.createObjectURL(blob);
chrome.downloads.download({ url, filename: 'settings-export.json' });
});
// Import (esempio semplificato)
function importSettings(json) {
const obj = JSON.parse(json);
chrome.storage.sync.set(obj, () => console.log('Import completato'));
}
Riepilogo finale
Chrome Storage Sync è uno strumento potente per sincronizzare preferenze e piccoli dataset fra dispositivi. Tuttavia richiede attenzione su permessi, limiti di quota, sicurezza e gestione dei conflitti. Seguendo le checklist e i playbook in questo articolo, puoi configurare, testare e mantenere una strategia di storage robusta.
Note finali: se preferisci non usare la sincronizzazione, chrome.storage.local resta un’ottima alternativa. Per dati sensibili o volumi elevati, valuta soluzioni server-side o storage di sistema più sicuro.
Risorse aggiuntive
- Documentazione ufficiale Chrome Extensions - Storage API
- Linee guida su sicurezza web e Content Security Policy
Immagini utilizzate:
Cancella dati di navigazione" in Chrome" class="block w-auto max-w-full h-auto mx-auto py-2 rounded-xl "/>
Materiali simili

Sfondi diversi per ogni schermata Home su Android

Monitoraggio Apache Tomcat: contatori e regole

Proteggersi dal clickjacking: guida pratica

Sfondi diversi per ogni Home su Android

Rimuovere i tuoi dati dai data broker
