API HTML
Il existe deux API localStorage dans le navigateur : localStorage et sessionStorage, toutes deux présentes dans l'objet window. localStorage correspond à window.localStorage, et sessionStorage correspond à window.sessionStorage.
La principale différence entre localStorage et sessionStorage est leur durée de vie.
Utilisation de base

Le terme ici
Scopefait référence à : comment isoler localStorage entre différentes pages (vous ne pouvez pas lire le localStorage de Tencent sur la page de Baidu, haha).localStorageTant que le même protocole, le même nom d'hôte et le même port sont utilisés, les mêmes données localStorage peuvent être lues/modifiées.sessionStorageComparerlocalStoragePlus strictement, en plus du protocole, du nom d'hôte et du port, il faut aussi être dans le mêmewindow(c'est-à-dire un onglet de navigateur).
Durée de vie
localStorageThéoriquement, il est valide de façon permanente, c'est-à-dire qu'il ne disparaîtra pas à moins d'être activement effacé. Même si les données enregistrées dépassent la taille spécifiée par le navigateur, il n'effacera pas les anciennes données mais ne fera que lever une erreur. Cependant, notez que dans les navigateurs d'appareils mobiles ou diversNative ApputiliséWebViewdans,localStorageil n'est pas fiable, et peut être effacé pour diverses raisons (comme quitter l'application, changer de réseau, mémoire insuffisante, etc.).sessionStorageSa durée de vie, comme son nom l'indique, est similaire àsessionsession. Dès que le navigateur (y compris les onglets du navigateur) est fermé, il sera effacé. Parce quesessionStoragela durée de vie de sessionStorage est trop courte, ses scénarios d'application sont très limités. Cependant, d'un autre côté, il est moins sujet aux exceptions et relativement fiable.
Structure de données
localStorage est un type de données clé-valeur (KV) standard. Il est simple mais aussi facile à étendre. Tant que l'objet à stocker dans localStorage est converti en une chaîne de caractères selon un certain encodage, il peut être facilement pris en charge. Par exemple : convertir un objet en une chaîne JSON permet de stocker des objets ; convertir une image en DataUrl (base64) permet de stocker des images. De plus, pour les types de données clé-valeur, la caractéristique selon laquelle « les clés sont uniques » est assez importante. Si vous affectez une valeur de façon répétée avec la même clé, cela écrasera la valeur précédente.
Temps d'expiration
Malheureusement, localStorage ne prend pas nativement en charge la définition d'un temps d'expiration. Si vous souhaitez en définir un, vous devez encapsuler vous-même une couche de logique :
Limite de capacité
Actuellement, l'industrie le fixe pratiquement à l'unanimité à 5M, ce qui est déjà bien plus grand que les 4K des cookies. Utilisez-le avec parcimonie, jeune homme.
Restriction de domaine
En raison de la politique de sécurité du navigateur, localStorage ne peut pas être interdomaine, et un sous-domaine ne peut pas hériter des données localStorage du domaine parent. Cela est assez différent des cookies.
Gestion des exceptions
localStorage n'est pas complètement stable dans l'environnement de navigateur actuel, et divers bugs peuvent survenir. La gestion des exceptions doit être considérée attentivement. Personnellement, je pense que localStorage n'est qu'une méthode d'optimisation pour la localisation des ressources. La facilité d'utilisation du programme ne doit pas être réduite à cause de l'utilisation de localStorage. Je m'oppose absolument à une gestion des exceptions qui ne fait qu'afficher quelques messages d'erreur dans la console. La gestion des exceptions pour localStorage utilise généralementtry/catchpour intercepter/gérer les exceptions.
Comment tester si le navigateur actuel de l'utilisateur prend en charge localStorage
La pratique courante actuelle consiste à vérifierwindow.localStorage, qu'il existe ou non.try/catchDans la structure,set/getun élément de données de test est utilisé pour vérifier si une exception se produit, afin de déterminer si le navigateur prend en charge localStorage. Bien sûr, n'oubliez pas de supprimer les données de test après le test.
Compatibilité des navigateurs
| Fonctionnalité | Chrome | Firefox | Internet Explorer | Opera | Safari | Android | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|---|---|
| localStorage | 4 | 3.5 | 8 | 10.50 | 4 | 2.1 | 11 | iOS 3.2 |
| sessionStorage | 5 | 2 | 8 | 10.50 | 4 | 2.1 | 11 | iOS 3.2 |
Comment déboguer
Dans les outils de développement Chrome,Resources - Local Storagepanneau, etResources - Session Storagedans le panneau, vous pouvez voir les données localStorage sous le domaine actuel.

Impossible d'appeler setItem() de façon répétée sur les appareils iOS
De plus, sur iPhone/iPad, une étrange erreur QUOTA_EXCEEDED_ERR se produit parfois lors de l'appel à setItem(). Dans ce cas, en général, appeler removeItem() avant setItem() résoudra le problème.
Plugins recommandés
Articles de référence
Lien d'origine : https://segmentfault.com/a/1190000004121465