chrome.storage

refresh date: 2026-09-25 robots: noindex

Description

Utilisez l'API chrome.storage pour stocker, récupérer et suivre les modifications apportées aux données utilisateur.

Autorisations

storage

Présentation

L'API Storage fournit un moyen spécifique aux extensions de conserver les données et l'état de l'utilisateur. Elle est semblable aux API de stockage de la plate-forme Web (IndexedDB et Storage), mais elle a été conçue pour répondre aux besoins de stockage des extensions. Voici quelques-unes des principales fonctionnalités :

  • Tous les contextes d'extension, y compris le service worker d'extension et les scripts de contenu, ont accès à l'API Storage.
  • Les valeurs sérialisables JSON sont stockées en tant que propriétés d'objet.
  • L'API Storage est asynchrone avec des opérations de lecture et d'écriture groupées.
  • Même si l'utilisateur vide le cache et l'historique de navigation, les données sont conservées.
  • Les paramètres stockés sont conservés même lorsque vous utilisez le mode navigation privée fractionné.
  • Inclut une zone de stockage gérée exclusive en lecture seule pour les règles d'entreprise.

Même si les extensions peuvent utiliser l'interface [Storage][mdn-storage] (accessible depuis window.localStorage) dans certains contextes (pop-up et autres pages HTML), cela n'est pas recommandé pour les raisons suivantes :

  • Le service worker de l'extension ne peut pas accéder à Storage.
  • Les scripts de contenu partagent l'espace de stockage avec la page hôte.
  • Les données enregistrées à l'aide de l'interface Storage sont perdues lorsque l'utilisateur efface son historique de navigation.

Pour déplacer des données des API de stockage Web vers les API de stockage d'extension à partir d'un service worker :

  1. Créez un document hors écran avec une routine de conversion et un gestionnaire [onMessage][on-message].
  2. Ajoutez une routine de conversion à un document hors écran.
  3. Dans le service worker de l'extension, vérifiez chrome.storage pour vos données.
  4. Si vos données sont introuvables, [créez][create-offscreen] un document hors écran et appelez [sendMessage()][send-message] pour lancer la routine de conversion.
  5. Dans le gestionnaire onMessage du document hors écran, appelez la routine de conversion.

Il existe également quelques nuances dans le fonctionnement des API de stockage Web dans les extensions. Pour en savoir plus, consultez l'article [Stockage et cookies][storage-and-cookies].

Espaces de stockage

L'API Storage est divisée en quatre buckets ("zones de stockage") :

storage.local
Les données sont stockées localement et sont effacées lorsque l'extension est supprimée. La limite de quota est d'environ 10 Mo, mais elle peut être augmentée en demandant l'autorisation "unlimitedStorage". Envisagez de l'utiliser pour stocker de plus grandes quantités de données.
storage.sync
Si la synchronisation est activée, les données sont synchronisées avec tous les navigateurs Chrome auxquels l'utilisateur est connecté. Si elle est désactivée, elle se comporte comme storage.local. Chrome stocke les données localement lorsque le navigateur est hors connexion et reprend la synchronisation lorsqu'il est de nouveau en ligne. La limite de quota est d'environ 100 Ko, soit 8 Ko par élément. Envisagez de l'utiliser pour conserver les paramètres utilisateur sur les navigateurs synchronisés.
storage.session
Conserve les données en mémoire pendant la durée d'une session de navigateur. Par défaut, il n'est pas exposé aux scripts de contenu, mais ce comportement peut être modifié en définissant chrome.storage.session.setAccessLevel(). La limite de quota est d'environ 10 Mo. Envisagez de l'utiliser pour stocker des variables globales entre les exécutions de service workers.
storage.managed
Les administrateurs peuvent utiliser un schéma et des règles d'entreprise pour configurer les paramètres d'une extension compatible dans un environnement géré. Cette zone de stockage est en lecture seule.

Fichier manifeste

Pour utiliser l'API Storage, déclarez l'autorisation "storage" dans le fichier manifeste de l'extension. Exemple :

{
  "name": "My extension",
  ...
  "permissions": [
    "storage"
  ],
  ...
}

Utilisation

Les exemples suivants illustrent les zones de stockage local, sync et session :

storage.local

chrome.storage.local.set({ key: value }).then(() => {
  console.log("Value is set");
});

chrome.storage.local.get(["key"]).then((result) => {
  console.log("Value currently is " + result.key);
});

storage.sync

chrome.storage.sync.set({ key: value }).then(() => {
  console.log("Value is set");
});

chrome.storage.sync.get(["key"]).then((result) => {
  console.log("Value currently is " + result.key);
});

storage.session

chrome.storage.session.set({ key: value }).then(() => {
  console.log("Value was set");
});

chrome.storage.session.get(["key"]).then((result) => {
  console.log("Value currently is " + result.key);
});

Pour en savoir plus sur la zone de stockage managed, consultez Manifeste pour les zones de stockage.

Limites de stockage et de limitation du débit

N'imaginez pas que l'ajout d'éléments à l'API Storage revient à les charger dans un gros camion. Ajouter des données à un espace de stockage revient à placer quelque chose dans un tuyau. Le tuyau peut déjà contenir des données, et il peut même être plein. Partez toujours du principe qu'il existe un délai entre le moment où vous ajoutez des données à l'espace de stockage et celui où elles sont réellement enregistrées.

Pour en savoir plus sur les limites des zones de stockage et sur ce qui se passe lorsqu'elles sont dépassées, consultez les informations sur les quotas pour sync, local et session.

Cas d'utilisation

Les sections suivantes présentent des cas d'utilisation courants de l'API Storage.

Réponse synchrone aux mises à jour du stockage

Pour suivre les modifications apportées au stockage, vous pouvez ajouter un écouteur à son événement onChanged. Lorsqu'un changement se produit dans l'espace de stockage, cet événement se déclenche. L'exemple de code écoute les modifications suivantes :

background.js:

chrome.storage.onChanged.addListener((changes, namespace) => {
  for (let [key, { oldValue, newValue }] of Object.entries(changes)) {
    console.log(
      `Storage key "${key}" in namespace "${namespace}" changed.`,
      `Old value was "${oldValue}", new value is "${newValue}".`
    );
  }
});

Nous pouvons aller encore plus loin. Dans cet exemple, nous avons une page d'options qui permet à l'utilisateur d'activer ou de désactiver un "mode débogage" (implémentation non présentée ici). La page d'options enregistre immédiatement les nouveaux paramètres dans storage.sync, et le service worker utilise storage.onChanged pour appliquer le paramètre dès que possible.

options.html:

<!-- type="module" allows you to use top level await -->
<script defer src="options.js" type="module"></script>
<form id="optionsForm">
  <label for="debug">
    <input type="checkbox" name="debug" id="debug">
    Enable debug mode
  </label>
</form>

options.js:

// In-page cache of the user's options
const options = {};
const optionsForm = document.getElementById("optionsForm");

// Immediately persist options changes
optionsForm.debug.addEventListener("change", (event) => {
  options.debug = event.target.checked;
  chrome.storage.sync.set({ options });
});

// Initialize the form with the user's option settings
const data = await chrome.storage.sync.get("options");
Object.assign(options, data.options);
optionsForm.debug.checked = Boolean(options.debug);

background.js:

function setDebugMode() { /* ... */ }

// Watch for changes to the user's options & apply them
chrome.storage.onChanged.addListener((changes, area) => {
  if (area === 'sync' && changes.options?.newValue) {
    const debugMode = Boolean(changes.options.newValue.debug);
    console.log('enable debug mode?', debugMode);
    setDebugMode(debugMode);
  }
});

Préchargement asynchrone depuis l'espace de stockage

Étant donné que les service workers ne sont pas toujours en cours d'exécution, les extensions Manifest V3 doivent parfois charger des données de manière asynchrone à partir de l'espace de stockage avant d'exécuter leurs gestionnaires d'événements. Pour ce faire, l'extrait de code suivant utilise un gestionnaire d'événements action.onClicked asynchrone qui attend que la variable globale storageCache soit renseignée avant d'exécuter sa logique.

background.js:

// Where we will expose all the data we retrieve from storage.sync.
const storageCache = { count: 0 };
// Asynchronously retrieve data from storage.sync, then cache it.
const initStorageCache = chrome.storage.sync.get().then((items) => {
  // Copy the data retrieved from storage into storageCache.
  Object.assign(storageCache, items);
});

chrome.action.onClicked.addListener(async (tab) => {
  try {
    await initStorageCache;
  } catch (e) {
    // Handle error that occurred during storage initialization.
  }

  // Normal action handler logic.
  storageCache.count++;
  storageCache.lastTabId = tab.id;
  chrome.storage.sync.set(storageCache);
});

Exemples d'extensions

Pour voir d'autres démonstrations de l'API Storage, explorez l'un des exemples suivants :

Types

AccessLevel

Chrome 102 ou version ultérieure

Niveau d'accès de la zone de stockage.

Énumération

"TRUSTED_CONTEXTS"
Spécifie les contextes provenant de l'extension elle-même.

"TRUSTED_AND_UNTRUSTED_CONTEXTS"
Spécifie les contextes provenant de l'extérieur de l'extension.

StorageChange

Propriétés

  • newValue

    facultatif

    Nouvelle valeur de l'élément, s'il y en a une.

  • oldValue

    facultatif

    Ancienne valeur de l'élément, le cas échéant.

Propriétés

local

Les éléments de la zone de stockage local sont locaux pour chaque machine.

Type

StorageArea et objet

Propriétés

  • QUOTA_BYTES

    10485760

    Quantité maximale (en octets) de données pouvant être stockées dans l'espace de stockage local, mesurée par la conversion en chaîne JSON de chaque valeur plus la longueur de chaque clé. Cette valeur sera ignorée si l'extension dispose de l'autorisation unlimitedStorage. Les mises à jour qui entraîneraient un dépassement de cette limite échouent immédiatement et définissent runtime.lastError si vous utilisez un rappel, ou une promesse refusée si vous utilisez async/await.

managed

Les éléments de la zone de stockage managed sont définis par une règle d'entreprise configurée par l'administrateur du domaine et sont en lecture seule pour l'extension. Toute tentative de modification de cet espace de noms entraîne une erreur. Pour savoir comment configurer une règle, consultez Manifeste pour les zones de stockage.

sync

Les éléments de la zone de stockage sync sont synchronisés à l'aide de la synchronisation Chrome.

Type

StorageArea et objet

Propriétés

  • MAX_ITEMS

    512

    Nombre maximal d'éléments pouvant être stockés dans l'espace de stockage de synchronisation. Les mises à jour qui entraîneraient un dépassement de cette limite échoueront immédiatement et définiront runtime.lastError lors de l'utilisation d'un rappel ou lorsqu'une promesse est rejetée.

  • MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE

    1000000

    Obsolète

    L'API storage.sync n'a plus de quota d'opérations d'écriture soutenues.

  • MAX_WRITE_OPERATIONS_PER_HOUR

    1800

    Nombre maximal d'opérations set, remove ou clear pouvant être effectuées chaque heure. Cela correspond à une requête toutes les deux secondes, un plafond inférieur à la limite d'écritures par minute plus élevée à court terme.

    Les mises à jour qui entraîneraient un dépassement de cette limite échouent immédiatement et définissent runtime.lastError lorsqu'un rappel est utilisé ou qu'une promesse est rejetée.

  • MAX_WRITE_OPERATIONS_PER_MINUTE

    120

    Nombre maximal d'opérations set, remove ou clear pouvant être effectuées chaque minute. Cette limite est de deux par seconde, ce qui permet un débit plus élevé que les écritures par heure sur une période plus courte.

    Les mises à jour qui entraîneraient un dépassement de cette limite échouent immédiatement et définissent runtime.lastError lorsqu'un rappel est utilisé ou qu'une promesse est rejetée.

  • QUOTA_BYTES

    102400

    Quantité totale maximale (en octets) de données pouvant être stockées dans l'espace de stockage de synchronisation, mesurée par la chaîne JSON de chaque valeur plus la longueur de chaque clé. Les mises à jour qui entraîneraient un dépassement de cette limite échouent immédiatement et définissent runtime.lastError lorsqu'un rappel est utilisé ou qu'une promesse est rejetée.

  • QUOTA_BYTES_PER_ITEM

    8192

    Taille maximale (en octets) de chaque élément individuel dans l'espace de stockage de synchronisation, mesurée par la chaîne JSON de sa valeur plus la longueur de sa clé. Les mises à jour contenant des éléments dépassant cette limite échoueront immédiatement et définiront runtime.lastError lors de l'utilisation d'un rappel ou lorsqu'une promesse est refusée.

Événements

onChanged

chrome.storage.onChanged.addListener(
  callback: function,
)

Se déclenche lorsqu'un ou plusieurs éléments sont modifiés.

Paramètres

  • callback

    fonction

    Le paramètre callback se présente comme suit :

    (changes: object, areaName: string) => void

    • modifications

      objet

    • areaName

      chaîne