HTML5 Local Storage fallback solutions [closed] HTML5 Local Storage fallback solutions [closed] jquery jquery

HTML5 Local Storage fallback solutions [closed]


Pure JS based simple localStorage polyfill:

Demo: http://jsfiddle.net/aamir/S4X35/

HTML:

<a href='#' onclick="store.set('foo','bar')">set key: foo, with value: bar</a><br/><a href='#' onclick="alert(store.get('foo'))">get key: foo</a><br/><a href='#' onclick="store.del('foo')">delete key: foo</a>

JS:

window.store = {    localStoreSupport: function() {        try {            return 'localStorage' in window && window['localStorage'] !== null;        } catch (e) {            return false;        }    },    set: function(name,value,days) {        if (days) {            var date = new Date();            date.setTime(date.getTime()+(days*24*60*60*1000));            var expires = "; expires="+date.toGMTString();        }        else {            var expires = "";        }        if( this.localStoreSupport() ) {            localStorage.setItem(name, value);        }        else {            document.cookie = name+"="+value+expires+"; path=/";        }    },    get: function(name) {        if( this.localStoreSupport() ) {            var ret = localStorage.getItem(name);            //console.log(typeof ret);            switch (ret) {              case 'true':                   return true;              case 'false':                  return false;              default:                  return ret;            }        }        else {            // cookie fallback            /*             * after adding a cookie like             * >> document.cookie = "bar=test; expires=Thu, 14 Jun 2018 13:05:38 GMT; path=/"             * the value of document.cookie may look like             * >> "foo=value; bar=test"             */            var nameEQ = name + "=";  // what we are looking for            var ca = document.cookie.split(';');  // split into separate cookies            for(var i=0;i < ca.length;i++) {                var c = ca[i];  // the current cookie                while (c.charAt(0)==' ') c = c.substring(1,c.length);  // remove leading spaces                if (c.indexOf(nameEQ) == 0) {  // if it is the searched cookie                    var ret = c.substring(nameEQ.length,c.length);                    // making "true" and "false" a boolean again.                    switch (ret) {                      case 'true':                          return true;                      case 'false':                          return false;                      default:                          return ret;                    }                }            }            return null; // no cookie found        }    },    del: function(name) {        if( this.localStoreSupport() ) {            localStorage.removeItem(name);        }        else {            this.set(name,"",-1);        }    }}​


I use PersistJS (github repository), which handles client-side storage seamlessly and transparently to your code. You use a single API and get support for the following backends:

  • flash: Flash 8 persistent storage.
  • gears: Google Gears-based persistent storage.
  • localstorage: HTML5 draft storage.
  • whatwg_db: HTML5 draft database storage.
  • globalstorage: HTML5 draft storage (old spec).
  • ie: Internet Explorer userdata behaviors.
  • cookie: Cookie-based persistent storage.

Any of those can be disabled—if, for example, you don't want to use cookies. With this library, you'll get native client-side storage support in IE 5.5+, Firefox 2.0+, Safari 3.1+, and Chrome; and plugin-assisted support if the browser has Flash or Gears. If you enable cookies, it will work in everything (but will be limited to 4 kB).


have you seen the polyfill page on the Modernizr wiki?

https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

look for the webstorage section on that page and you will see 10 potential solutions (as of July 2011).

good luck!Mark