[Asp.net mvc]Asp.net mvc 中使用LocalStorage

目前使用比较多的本地存储方案有比如Flash SharedObject、GoogleGears、Cookie、LocalStorage、User Data、Open Database等方案。综合比较了下,最终选择了LocalStorage。关于他们之间的比较,我在此不多说了,本文着重实现。想了解他们之间的区别的朋友可以参考一下这几个园友博客:1.JavaScript本地存储实践: http://...
摘要由CSDN通过智能技术生成

目前使用比较多的本地存储方案有比如Flash SharedObject、Google Gears、Cookie、LocalStorage、User Data、Open Database等方案。综合比较了下,最终选择了LocalStorage。
关于他们之间的比较,我在此不多说了,本文着重实现。想了解他们之间的区别的朋友可以参考一下这几个园友博客:
1.JavaScript本地存储实践 http://www.cnblogs.com/xupeiyu/p/4447443.html
2.HTML5 LocalStorage 本地存储:http://www.cnblogs.com/xiaowei0705/archive/2011/04/19/2021372.html
这里是用UserData和HTML5-LocalStorage结合的方式,来取代cookie。参考修改了alien朋友的LocalStorage.js,<<传送门>>
做个简单的比较:
UserData:仅IE可用
Flash:存储空间大
Google Gears:存储空间没限制,需装额外的插件
HTML5-LocalStorage:官方建议每个站点可以本地存储5M的内容
原本的js我进行了些修改,如下:

Namespace = new Object();
// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Grandsoft.GEA"
Namespace.register = function(fullNS) {
    // 将命名空间切成N部分, 比如Grandsoft、GEA等
    var nsArray = fullNS.split('.');
    var sEval = "";
    var sNS = "";
    for (var i = 0; i < nsArray.length; i++) {
        if (i != 0) sNS += ".";
        sNS += nsArray[i];
        // 依次创建构造命名空间对象(假如不存在的话)的语句
        // 比如先创建Grandsoft,然后创建Grandsoft.GEA,依次下去
        sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"
    }
    if (sEval != "") eval(sEval);
}

/**
 * 注册命名空间
 */
Namespace.register('SummitLocalStorage');

/**
 * @class SummitLocalStorage.LocalStorage
 * 跨浏览器的本地存储实现。高级浏览器使用localstorage,ie使用UserData。虽然说是本地存储,也请不要存储过大数据,最好不要大于64K.
 * 因为ie下UserData每页最大存储是64k。
 * @singleton
 * @author zhaoxianlie (xianliezhao@foxmail.com)
 */
(function() {
    /**
     * 验证字符串是否合法的键名
     * @param {Object} key 待验证的key
     * @return {Boolean} true:合法,false:不合法
     * @private
     */
    function _isValidKey(key) {
        return (new RegExp("^[^\\x00-\\x20\\x7f\\(\\)<>@,;:\\\\\\\"\\[\\]\\?=\\{\\}\\/\\u0080-\\uffff]+\x24")).test(key);
    }

    //所有的key
    var _clearAllKey = "_baidu.ALL.KEY_";

    /**
     * 创建并获取这个input:hidden实例
     * @return {HTMLInputElement} input:hidden实例
     * @private
     */
    function _getInstance() {
        //把UserData绑定到input:hidden上
        var _input = null;
        //是的,不要惊讶,这里每次都会创建一个input:hidden并增加到DOM树种
        //目的是避免数据被重复写入,提早造成“磁盘空间写满”的Exception
        _input = document.createElement("input");
        _input.type = "hidden";
        _input.addBehavior("#default#userData");
        document.body.appendChild(_input);
        return _input;
    }

    /**
     * 将数据通过UserData的方式保存到本地,文件名为:文件名为:config.key[1].xml
     * @param {String} key 待存储数据的key,和config参数中的key是一样的
     * @param {Object} config 待存储数据相关配置
     * @cofnig {String} key 待存储数据的key
     * @config {String} value 待存储数据的内容
     * @config {String|Object} [expires] 数据的过期时间,可以是数字,单位是毫秒;也可以是日期对象,表示过期时间
     * @private
     */
    function __setItem(key, config) {
        try {
            var input = _getInstance();
            //创建一个Storage对象
            var storageInfo = config || {};
            //设置过期时间
            if (storageInfo.expires) {
                var expires;
                //如果设置项里的expires为数字,则表示数据的能存活的毫秒数
                if ('number' == typeof storageInfo.expires) {
                    expires = new Date();
                    expires.setTime(expires.getTime() + storageInfo.expires);
                }
                input.expires = expires.toUTCString();
            }

            //存储数据
            input.setAttribute(storageInfo.key, storageInfo.value);
            //存储到本地文件,文件名为:storageInfo.key[1].xml
            input.save(storageInfo.ke
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值