热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

本地存储组件实现对IE低版本浏览器的兼容性支持

    在前端开发过程中,会用到本地缓存,但是由于浏览器对不同规范支持的程度不一样,每次进行使用都要为兼容行花费不少时间。我整理了一个本地存储的组件。    组件特点:可以配置使用localStor

    在前端开发过程中,会用到本地缓存,但是由于浏览器对不同规范支持的程度不一样,每次进行使用都要为兼容行花费不少时间。我整理了一个本地存储的组件。
    组件特点:
可以配置使用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;
})();


   



推荐阅读
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • js中恢复原始值的代码怎么写(js中恢复原始值的代码怎么写) ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • This post discusses an issue encountered while using the @name annotation in documentation generation, specifically regarding nested class processing and unexpected output. ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • 本文介绍了如何在React和React Native项目中使用JavaScript进行日期格式化,提供了获取近7天、近半年及近一年日期的具体实现方法。 ... [详细]
author-avatar
书友48919914
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有