I did this before, I don't know if it's kind of dirty, but it works for me. What I did was to rewrite the Storage prototype so I can store objects.
First, I "save" the original methods:
Storage.prototype._setItem = Storage.prototype.setItem;
Storage.prototype._getItem = Storage.prototype.getItem;
And then I rewrite with the new ones:
Storage.prototype.setItem = function(key, object){
if(typeof object == 'object'){
this._setItem(key, JSON.stringify(object));
}
else{
this._setItem(key, object);
}
}
Storage.prototype.getItem = function(key){
var val = this._getItem(key);
try{
val = JSON.parse(val);
}catch(e){}
return val;
}
Having this, you can use it as:
localStorage.setItem('test', {value: 1}); // or localStorage.setItem('test', '{value: 1}')
localStorage.setItem('test2', [3,2,1]); // or localStorage.setItem('test2', '[3,2,1]');
localStorage.setItem('test3', '{no object stuff');
And retrieve the same data with getItem
localStorage.getItem('test'); // Object: {value: 1}
localStorage.getItem('test2'); // Array: [3,2,1]
localStorage.getItem('test3'); // String: '{no object stuff'