本地存储组件--兼容IE低版本
- 可以配置使用localStorage、sessionStorage、cookie、Object,IE低版本支持userData
- 统一的使用接口set、get、remove
- 使用方便,直接引入JS,进行初始化即可
(function() {
var ua = navigator.userAgent.toLowerCase();
var t = ua.match(/msie ([\d.]+)/);
var ie = t && t[1];
var useUserData = ie ==6 || ie == 7;
var encodeVal = function(value) {
return encodeURIComponent(value);
};
var decodeVal = function(value) {
return decodeURIComponent(value);
};
var isCookieEnabled = function() {
if(window.navigator.cookieEnabled) {
return window.navigator.cookieEnabled;
}
var key = 'test_cookie_enable',
value = 'test' + Math.random(),
result = _cookieStorage.set(key, value);
if (!result) {
return false;
}
var value2 = _cookieStorage.get(key);
_cookieStorage.remove(key);
return value == value2;
};
var _sessionStorage = {
get : function(key) {
return sessionStorage.getItem(key) || null;
},
set : function(key, value) {
sessionStorage.setItem(key, value);
},
remove : function(key) {
sessionStorage.removeItem(key);
}
};
var _localStorage = {
get : function(key) {
return decodeVal(localStorage.getItem(key)) || null;
},
set : function(key, value) {
value = encodeVal(value);
localStorage.setItem(key, value);
},
remove : function(key) {
localStorage.removeItem(key);
}
};
var _userDataStorage = {
init: function(maxage) {
var memory = document.createElement('input');
this.memory = memory;
memory.style.display = "none";
memory.style.behavior = "url('#default#userData')";
document.body.appendChild(memory);
if(maxage) {
var now = +new Date();
var expires = now + maxage * 1000;
memory.expires = new Date(expires).toUTCString();
}
memory.load('UserDataStorage');
},
get : function (key) {
return decodeVal(this.memory.getAttribute(key)) || null;
},
set : function(key, value) {
value = encodeVal(value);
this.memory.setAttribute(key, value);
this.memory.save('UserDataStorage');
},
remove : function(key) {
this.memory.removeAttribute(key);
this.memory.save('_userDataStorage');
}
};
var _cookieStorage = {
init: function(maxage, path) {
this.maxage = maxage;
this.path = path;
},
set : function(key, value) {
var cookie = key + '=' + encodeVal(value);
if(this.maxage) cookie += '; max-age=' + this.maxage;
if(this.path) cookie += '; path=' + this.path;
document.cookie = cookie;
},
get : function(key) {
var cookies = document.cookie;
var reg = new RegExp('(?:^ |)(' + key + ')=([^;]+)');
var value = cookies.match(reg);
if(value) {
return decodeVal(value[2]);
}
return null
},
remove : function(key) {
this.init(0, '/');
this.set(key, '');
}
};
var _objectStorage = {
init : function() {
this.data = {};
},
set : function(key, value) {
value = encodeVal(value);
this.data[key] = value;
},
get : function (key) {
return decodeVal(this.data[key]) || null;
},
remove : function(key) {
delete this.data[key];
}
};
/**
* 本地存储
* @param {String} type 存储类型 [local,session,cookie,page]
* @param {Number} maxage cookie到期时间 单位秒
* @param {String} path 路径
* @return {Object} 具有set、get、remove方法
*/
function Storage(type, maxage, path) {
var storage;
maxage = maxage || '';
path = path || '/';
type = type || 'local';
switch (type) {
case 'local' :
try { // 禁用cookie、localStorage时访问会报错
storage = window.localStorage ? _localStorage : useUserData ? _userDataStorage : Object;
} catch (e) {
storage = _objectStorage;
}
break;
case 'session' :
try { // 禁用cookie、_localStorage时访问会报错
storage = window.sessionStorage ? _sessionStorage : _objectStorage;
} catch (e) {
storage = _objectStorage;
}
break;
case 'cookie' :
storage = isCookieEnabled() ? _cookieStorage : _objectStorage;
break;
case 'page' :
storage = _objectStorage;
}
storage.init && storage.init(maxage, path);
return storage;
}
window.Storage = Storage;
})();
var storage = new Storage('local');
storage.set('name', '中国人');
var name = storage.get('name');
alert(name);
storage.remove('name');
var name = storage.get('name');
alert(name);
本地存储组件--兼容IE低版本的更多相关文章
- AngularJS开发指南7:AngularJS本地化,国际化,以及兼容IE低版本浏览器
AngularJS本地化,国际化 国际化,简写为i18n,指的是使产品快速适应不同语言和文化. 本地化,简称l10n,是指使产品在特定文化和语言市场中可用. 对开发者来说,国际化一个应用意味着将所有的 ...
- position:fixed 兼容浏览器低版本
项目中遇到的坑,写篇博客做个笔记纪念下,position: fixed一般来说都兼容各个浏览器,但是要兼容浏览低版本问题,就得用-webkit-transform: translateZ(0);这段代 ...
- 使用socket.io client 开发时兼容IE低版本的办法
使用socket.io client 开发时兼容IE低版本的办法 socket.io提供了针对各个版本浏览器的‘socket’功能的封转:websocket,长连接,流,flash什么的.给你格式化下 ...
- WebSocket兼容到低版本浏览器
就目前而言,WebSocket是最好的Web通信解决方案了.但是IE从10才开始兼容它,对于目前大量IE8存在的市场,原生的WebSocket显然不太实用,我们需要低版本兼容的解决方案.于是我模拟We ...
- 如何解决vux不兼容安卓低版本问题
最近做移动端H5页面用VUX来写UI组件这块.ios测试的时候没啥大问题,不过在4.4版本的华为手机上测试就崩了.接下来详细记述下崩的几个点. 第一:vux自带的提示框,在低版本安卓系统上全不是居中显 ...
- 轮播图采用js、jquery实现无缝滚动和非无缝滚动的四种案例实现,兼容ie低版本浏览器
项目源代码下载地址:轮播图 以下为项目实现效果:(由于gif太大,所以只上传一张图片,但效果完全能实现,经测试,在ie各版本浏览器及chrome,firefox等浏览器中均能实现效果,可以实现点击切换 ...
- js实现抛物线运动 兼容IE低版本(转)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 探讨兼容IE低版本的PC端响应式布局
http://www.jiangweishan.com/article/lowIeResposive.html 响应式布局,oh my god!!有点醉了,感觉是老生常谈的话题了.虽然已经谈过很多了, ...
- JS nodeList转数组,兼容IE低版本
一.前言 nodeList转数组貌似很少会这样去操作,但我在做图片懒加载时,我获取了所有需要做懒加载的img元素,也就是一个NodeList对象,打个比方: 对这些元素进行src修改后,我想将此项从N ...
随机推荐
- 一个跨域请求的XSS漏洞再续
上回提到,由于需要使用代理页面解决POST请求的跨域请求,需要在代理页面上执行传递的函数.所以我们做了白名单只有我们认可的回调函数才能在页面上执行,防止执行非法的JS方法,做脚本攻击. 我们所采用的方 ...
- git 拆库 切库 切分 子目录建库
如果git库目录是这样的: git根目录 project_a/ project_b/ ... 并且想为project_a单独创建一个代码库 # 拉一个新分支 git co -b project_a_r ...
- getInitParameter()
getInitParameter()方法是在GenericServlet接口中新定义的一个方法,用来调用初始化在web.xml中存放的参量.在web.xml配置文件中一个servlet中参量的初始 ...
- jQuery.extend 和 jQuery.fn.extend
1.jQuery.extend 我们先把jQuery看成了一个类,这样好理解一些.jQuery.extend(),是扩展的jQuery这个类. 假设我们把jQuery这个类看成是人类,能吃饭能喝水能跑 ...
- EF执行存储过程(带输出参数)
1.不含动态sql.带输出参数存储过程调用实例 1.存储过程代码: 2.EF自动生成代码(包括对应ObjectResult的实体模型): 3.调用存储过程代码实例: 总结: ObjectParam ...
- linux下mysql环境支持中文配置步骤
sql脚本执行前加上: CREATE DATABASE IF NOT EXISTS mydatabase DEFAULT CHARSET utf8 COLLATE UTF8_GENERAL_CI; u ...
- 委托,匿名方法,Lambda,泛型委托,表达式树
一.委托:完成一个委托应分三个步骤://step01:首先用delegate定义一个委托;public delegate int CalculatorAdd(int x, int y);//step0 ...
- hdu 5325 Crazy Bobo (树形dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Crazy Bobo Time Limit: 6000/3000 MS (Java ...
- php+mysql将大数据sql文件导入数据库
<?php $file_name = "d:test.sql"; $dbhost = "localhost"; $dbuser = "root& ...
- ubuntu中安装eclipse
1.下载eclipse安装包 http://mirror.neu.edu.cn/eclipse/technology/epp/downloads/release/kepler/SR2/eclipse- ...