Comment gérer l'erreur localStorage "QUOTA_EXCEEDED_ERR: DOM Exception 22" sur safari sous MacOs ou iOS

QUOTA_EXCEEDED_ERR ?

Récemment, j'ai été confronté à une erreur particulière :

QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota.

Le plus étrange c'est que j'avais cette erreur uniquement sur un iphone, ipad ou un mac mais pas tout le temps.

Au vu de l'erreur, j'ai bien vu que cela provenait de mon utilisation de window.localStorage.

Je me suis concentré sur le problème et j'ai donc regardé du coté des données sauvegardées. Comme le quota de données à sauvegarder semble être dépassé, j'ai vidé le cache et autres données. J'ai vérifié, j'avais bien 0 octets de données de site sauvegardé.

J'ai refait un test et là encore j'ai rencontré la même erreur.

Après différentes recherche, je me suis rendu compte que les devices sur lesquels cela ne marchait pas, était tous en navigation privée !

En repassant en navigation non privée, je n'ai plus l'erreur !

En effet sous iOS ou mac, la navigation privée de safari est très restrictive et empèche toute sauvegarde de donnée. Il est à noter que chrome autorise la sauvegarde mais supprime tout lorsque vous fermez le navigateur et c'est pour cette raison que vous n'avez pas l'erreur sous chrome.

Quelle solution ?

Pour ne pas avoir d'erreur, il suffit d'utiliser le try afin d'attraper l'exception que cette erreur soulève. Cela évitera d'interrompre le reste du javascript et donc de pouvoir continuer à naviguer et intéragir normalement avec le site :

try {
    if (window.localStorage) {
        localStorage.getItem('mon_item');
    }
} catch (e) {
    // traitement lors de l'exception
}

image jerome debray

Jerome Debray est responsable de projet et lead developper web pour Ouestfrance Multimedia dans la business unit Auto.

retourner en haut de la page