Skip to content

Instantly share code, notes, and snippets.

@tagawa
Created June 6, 2012 06:31
Show Gist options
  • Save tagawa/2880273 to your computer and use it in GitHub Desktop.
Save tagawa/2880273 to your computer and use it in GitHub Desktop.
sessionStorage polyfill
/*
* Based on: http://www.quirksmode.org/js/cookies.html
* and https://github.com/wojodesign/local-storage-js/blob/master/storage.js
* and https://gist.github.com/350433
* License: http://www.opensource.org/licenses/MIT
*/
(function(window) {
'use strict';
window.sessionStorage = window.sessionStorage || {
length: 0,
setItem: function(key, value) {
document.cookie = key + '=' + value + '; path=/';
this.length++;
},
getItem: function(key) {
var keyEQ = key + '=';
var ca = document.cookie.split(';');
for (var i = 0, len = ca.length; i < len; i++) {
var c = ca[i];
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
if (c.indexOf(keyEQ) === 0) return c.substring(keyEQ.length, c.length);
}
return null;
},
removeItem: function(key) {
this.setItem(key, '', -1);
this.length--;
},
clear: function() {
// Caution: will clear all persistent cookies as well
var ca = document.cookie.split(';');
for (var i = 0, len = ca.length; i < len; i++) {
var c = ca[i];
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
var key = c.substring(0, c.indexOf('='));
this.removeItem(key);
}
this.length = 0;
},
key: function(n) {
var ca = document.cookie.split(';');
if (n >= ca.length || isNaN(parseFloat(n)) || !isFinite(n)) return null;
var c = ca[n];
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
return c.substring(0, c.indexOf('='));
}
};
})(this);
@zottto
Copy link

zottto commented Aug 16, 2012

Firefox 14 tells me "TypeError: setting a property that has only a getter, key: function(n) {" when loading the script. Any ideas?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment