跨浏览器的本地存储解决方案
跨浏览器的本地存储多种方式,例如:
1、localStorage:只支持IE8+、FireFox、Chrome、Opera等,不支持IE8以下的浏览器。
2、浏览器Cookie:支持的数据存储量相对较少,每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉,有些浏览器甚至不支持;同时,Cookie存在安全性问题,如果cookie被人拦截了,就可以取得所有的session信息。
3、可以在页面上嵌一个隐藏的Flash,然后使用Flash的Flash SharedObject,它基本上不会有兼容性问题,只有要额外的引入Flash和JS,但这样会增加页面负担。
4、User Data: 是微软为IE专门在系统中开辟的一块存储空间(这个支持所有IE浏览器),只支持Windows+IE的组合(单个文件的大小限制是128KB,一个域名下总共可以保存1024KB的文件,文件个数应该没有限制。在受限站点里这两个值分别是64KB和640KB。)
综上,我们可以用以localStorage+User Data结合的方式来作为本地存储的解决方案:
(function (window) { window.localDataStore = { hname: location.hostname ? location.hostname : 'localStatus', isLocalStorage: window.localStorage ? true : false, dataDom: null, initDom: function () { if (!this.dataDom) { try { this.dataDom = document.createElement('input'); this.dataDom.type = 'hidden'; this.dataDom.style.display = "none"; this.dataDom.addBehavior('#default#userData'); document.body.appendChild(this.dataDom); var exDate = new Date(); exDate = exDate.getDate() + 30; this.dataDom.expires = exDate.toUTCString(); } catch (ex) { return false; } } return true; }, set: function (key, value) { if (this.isLocalStorage) { window.localStorage.setItem(key, value); } else { if (this.initDom()) { this.dataDom.load(this.hname); this.dataDom.setAttribute(key, value); this.dataDom.save(this.hname) } } }, get: function (key) { if (this.isLocalStorage) { return window.localStorage.getItem(key); } else { if (this.initDom()) { this.dataDom.load(this.hname); return this.dataDom.getAttribute(key); } } }, remove: function (key) { if (this.isLocalStorage) { localStorage.removeItem(key); } else { if (this.initDom()) { this.dataDom.load(this.hname); this.dataDom.removeAttribute(key); this.dataDom.save(this.hname) } } } } })(window);
"唯有高屋建瓴,方可水到渠成"