随笔 - 59, 文章 - 0, 评论 - 10
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

localStorage兼容ie6/7 用addBehavior 实现

Posted on 2016-07-12 17:50  绝交  阅读(1479)  评论(0编辑  收藏

制作过程我就不说了,程序下面会占出来

define(function(){
    if('localStorage' in window) return;
    function Storage(){
        this.box = document.body || document.getElementByTagName('head')[0] || document.documentElement;
        this.name = 'localStorage'
        this.data = document.createElement(this.name);
        this.data.addBehavior("#default#userData");
        this.box.appendChild(this.data);
        this.map = [];
        this.length = this.length();
    }
    Storage.prototype.setItem = function(name,val){
        if(name=='localStorage-map'){
            throw new Error("this is localStorage in key [localStorage-map] not use!")
            return ;
        }
        if(this.map.length==0){
            this.data.load('localStorage-map');
            var data = this.data.getAttribute('localStorage-map');
            if(data!=null){
                this.map = data.split(',');
            }
        }
        var flag = true;
        for(var i in this.map){
            if(this.map[i] == name){
                flag = false;
            }
        }
        if(flag){
            this.map.push(name)
        }
        this.data.setAttribute(name,val);
        var date = new Date();
        date.setDate(date.getDate()+700);
        this.data.expires = date.toUTCString();
        this.data.save(name);
        this.data.setAttribute('localStorage-map',this.map);
        this.data.save('localStorage-map');
    }
    Storage.prototype.getItem = function(name){
        if(name == 'localStorage-map'){
            throw new Error("this is localStorage in key [localStorage-map] not use!");
            return;
        }
        this.data.load(name);
        return this.data.getAttribute(name);
    };
    Storage.prototype.length = function(){
        if(this.map.length==0){
            this.data.load('localStorage-map');
            var data = this.data.getAttribute('localStorage-map');
            if(data!=null){
                this.map = data.split(',');
            }
        }
        for (var i = this.map.length - 1; i >= 0; i--) {
            alert(this.getItem(this.map[i]))
            if(this.getItem(this.map[i])==undefined || this.getItem(this.map[i])==""){
                this.map.splice(i,1);
            }
        }
        return this.map.length;
    };
    Storage.prototype.removeItem = function(name){
        if(typeof name=="undefined" || name=="") return;
        if(this.map.length==0){
            if(this.getItem('localStorage-map')!=null){
                this.map = this.getItem('localStorage-map').split(',');
            }
        }
        for(var i in this.map){
            if(this.map[i] == name){
                this.map.splice(i,1);
            }
        }
        this.data.load(name);
        this.data.setAttribute(name,undefined);
        this.data.save(name);
        return true;
    },
    Storage.prototype.clear=function(){
        if(this.map.length==0){
            if(this.getItem('localStorage-map')!=null){
                this.map = this.getItem('localStorage-map').split(',');
            }
        }
        for(var i in this.map){
            this.removeItem(this.map[i]);
        }
    }
    window.localStorage = new Storage();
});

调用程序 

localStorage.setItem('value','{askdjf:ddd}')
            localStorage.setItem('name','{ddddddd:ddd}')
            alert(localStorage.getItem('value'))
            alert(localStorage.getItem('name'))
            alert(localStorage.removeItem('name'))
            alert(localStorage.length);

我只是简单测试了一下可以,不知道哪里还有问题,望指点一二!!!!!