SessionStorage et LocalStorage permettent d'enregistrer des paires clé / valeur dans un navigateur Web. La valeur doit être une chaîne et enregistrer les objets js n'est pas trivial.
var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object
De nos jours, vous pouvez éviter cette limitation en sérialisant les objets en JSON, puis en les désérialisant pour récupérer les objets. Mais l'API de stockage passe toujours par les méthodes setItem
et getItem
.
sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.getItem('user')); // An object :D
Puis-je éviter cette limitation?
Je veux juste exécuter quelque chose comme ceci:
sessionStorage.user.name; // 'John'
sessionStorage.user.name = 'Mary';
sessionStorage.user.name // 'Mary'
J'ai essayé les méthodes defineGetter
et defineSetter
pour intercepter les appels, mais c'est un travail fastidieux, car je dois définir toutes les propriétés et ma cible n'est pas de connaître les propriétés futures.
javascript
session-storage
Ferran Basora
la source
la source
Réponses:
Soit vous pouvez utiliser les accesseurs fournis par l'API de stockage Web, soit vous pouvez écrire un wrapper / adaptateur. D'après votre problème déclaré avec defineGetter / defineSetter, il semble que l'écriture d'un wrapper / adaptateur est trop de travail pour vous.
Honnêtement, je ne sais pas quoi te dire. Peut-être pourriez-vous réévaluer votre opinion sur ce qu'est une «limitation ridicule». L'API de stockage Web est exactement ce qu'elle est censée être, un magasin de clés / valeurs.
la source
Ne pourriez-vous pas «stringifier» votre objet ... puis l'utiliser
sessionStorage.setItem()
pour stocker cette représentation sous forme de chaîne de votre objet ... puis quand vous en avez besoinsessionStorage.getItem()
et ensuite l'utiliser$.parseJSON()
pour le récupérer?Exemple de travail http://jsfiddle.net/pKXMa/
la source
La solution consiste à stringifier l'objet avant d'appeler setItem sur sessionStorage.
la source
Il s'agit d'une solution dynamique qui fonctionne avec tous les types de valeur, y compris les objets:
Ensuite :
la source
Cas d'utilisation:
API
la source
if (typeof (Storage) !== "undefined"){ /* browser supports it */ }
Le stockage de session ne peut pas prendre en charge un objet arbitraire car il peut contenir des littéraux de fonction (fermetures de lecture) qui ne peuvent pas être reconstruits après un rechargement de page.
la source
la source
Vous pouvez également utiliser la bibliothèque de magasin qui l'exécute pour vous avec la capacité de crossbrowser.
exemple :
la source
Vous pouvez créer 2 méthodes de wrapper pour enregistrer et récupérer des objets à partir du stockage de session.
Utilisez-le comme ceci: - Obtenez un objet, modifiez certaines données et enregistrez-le.
la source