使用js实现前端缓存

来源:互联网 发布:unity3d 城市夜景资源 编辑:程序博客网 时间:2024/05/23 15:13

使用js实现前端缓存的工具类,在支持html5的浏览器上优先使用html5的storage进行缓存

调用方式为(例如存储):

sy.cookieString/('key','value')

此处使用的第三方js库为:

jquery.cookie.js

jquery.js

json2.js


var sy = sy || {};sy.data = sy.data || {};// 用于存放临时的数据或者对象/** * 0:当前窗口 * 1:所有窗口共享 * 2:指定域名结尾允许访问,配置domain,需要支持html5 */sy.getDataScope = function(){return 1;}/** * 范围 */sy.getDomain = function(){return ".com";}/** * 当前窗口缓存 */sy.setItem = function(key,value){if(key!=undefined){if(sy.data==undefined){sy.data = {};}sy.data[key]=value;}}/** * 当前窗口获取缓存 */sy.getItem = function(key){if(key!=undefined){if(sy.data==undefined){return undefined;}return sy.data[key];}}/** * 缓存数据 * @param key 键 * @param value 值 */sy.cookie = function(key,value){switch(sy.getDataScope()){case 0:if(sessionStorage){return storage(sessionStorage,key,value);}else{if(value==undefined){return sy.data[key];}else{sy.data[key]=value;return value;}}break;case 2:if(globalStorage){return storage(globalStorage[sy.getDomain()],key,value);}//如果域对象不可用则存储为全局case 1:if(localStorage){return storage(localStorage,key,value);}else{if(value==undefined){return $.cookie(key);;}else{$.cookie(key,value);;return value;}}break;}function storage(obj,key,value){if(obj){if(value==undefined){return obj.getItem(key);}else{obj.setItem(key,value);return value;}}}}/** * 仅用于存储cookie,会将对象转为jsonString */sy.cookieString = function(key,value){if(value!=undefined){sy.cookie(key,toJsonString(value));}}/** * 仅用于读取cookie,会将jsonString转为对象 */sy.cookieParse = function(key){var cv = sy.cookie(key);if(cv==undefined){return undefined;}return JSON.parse(cv);}/** * 清除所有缓存 */sy.clearCookies = function(){switch(sy.getDataScope()){case 0:if(sessionStorage){sessionStorage.clear();}else{sy.data={};}break;case 2:if(globalStorage){globalStorage[sy.getDomain()].clear();break;}//如果域对象不可用则清理全局case 1:if(localStorage){localStorage.clear();}else{clearCookies();function clearCookies(){var cookies = document.cookie.split(";");    for (var i = 0; i < cookies.length; i++) {    var cookie = cookies[i];    var eqPos = cookie.indexOf("=");    var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;    document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";    }if(cookies.length > 0){    for (var i = 0; i < cookies.length; i++) {    var cookie = cookies[i];    var eqPos = cookie.indexOf("=");    var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;    var domain = location.host.substr(location.host.indexOf('.'));    document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=" + domain;    }}}}break;}}/** * 删除cookie */sy.removeCookie = function(key){switch(sy.getDataScope()){case 0:if(sessionStorage){sessionStorage.removeItem(key);}else{sy.data[key]=undefined;}break;case 2:if(globalStorage){globalStorage[sy.getDomain()].removeItem(key);break;}//如果域对象不可用则删除全局cookiecase 1:if(localStorage){localStorage.removeItem(key);}else{$.cookie(key,null);}break;}}


0 0
原创粉丝点击