localstorage使用

 
(function () {
    window.Storage = (function () {
        //有关flash的
        var flash = {
            id: "Storage_Flash_",
            path: "/Resource/Js/storage-flash.swf",
            cache: function () { return document.getElementById(this.id) },
            insert: function () {
                if (this.cache()) { return true; } //如果有了不用新建了
                var html = [];
                try {//解决遨游的一个bug
                    if (external.max_language_id != undefined) {
                        this.path += "?random=" + Math.random();
                    }
                }
                catch (ex) { }
                if ("ActiveXObject" in window) {
                    html.push("<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' " +
                    "codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/" +
                    "swflash.cab#version=10,0,0,0' id='" + this.id + "' width='1' height='1'>");
                    html.push("<param name='allowScriptAccess' value='always' />");
                    html.push("<param name='movie' value='" + this.path + "' />");
                    html.push("</object>");
                } else {
                    html.push("<embed id='" + this.id + "' name='" + this.id + "' src='" + this.path + "' " +
                    "width='1' height='1' align='middle' allowScriptAccess='always' " +
                    "type='application/x-shockwave-flash' " +
                    "pluginspage='http://www.adobe.com/go/getflashplayer_cn' />");
                };
                var container = document.createElement("div");
                container.style.position = "absolute";
                container.style.top = "-999px";
                container.innerHTML = html.join("");
                try {
                    //document.documentElement.appendChild(container);
                    document.documentElement.insertBefore(container, document.documentElement.firstChild);
                    return true;
                }
                catch (ex) { return false; }
            },
            version: function () {
                var version = 0, n = navigator;
                if (n.plugins && n.plugins.length) {
                    for (var i = 0; i < n.plugins.length; i++) {
                        if (n.plugins[i].name.indexOf("Shockwave Flash") != -1) {

                            version = n.plugins[i].description.split("Shockwave Flash")[1];
                            break;
                        }
                    }
                } else if ("ActiveXObject" in window) {
                    for (var i = 15; i > 7; i--) {
                        try {
                            if (new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i)) {
                                version = parseInt(i);
                                break;
                            }
                        } catch (ex) { }
                    }
                }
                return parseInt(version);
            },
            check: function () {
                var bool = false;
                if (this.version() >= 10) {
                    bool = this.insert();
                }
                return bool;
            }
        };
        var o = {
            ls: (typeof window.localStorage == "object") ? true : false, //再支持localstorage
            t: (navigator.appVersion.toString().indexOf("MSIE") > 0
                && navigator.appVersion.toString().indexOf("MSIE 9.0") < 0) ? true : false,
            //ie9以下版本,在本地无法保存,采用服务器保存的方案
            g: (window.google && google.gears && google.gears.factory.create) ? true : false, //有gears再支持gears
            gs: (typeof window.globalStorage == "object") ? true : false, //再支持globalStorage
            f: (1 == 2) ? true : false, //有flash支持flashStorage//flash.check()
            u: false  //ie9以下版本,由于不支持跨页,所以放弃
        };
        //alert(o.ls+","+o.t+","+o.g+","+o.gs);
        //gears方案
        var g = (function () {
            var db = (o.g) ? google.gears.factory.create("beta.database", "1.0") : null;
            return {
                Set: function (name, key, val) {
                    var complete = false;
                    db.open("beta.database");
                    with (db) try {
                        execute("create table if not exists storage" + name + " (itemkey text unique not null PRIMARY key,itemval text not null)");
                        var rs = execute("select itemkey from storage" + name + " where itemkey=?", [key]);
                        if (rs.isValidRow()) { execute("update storage" + name + " set itemval=? where itemkey=?", [val, key]); } else { execute("insert into storage" + name + " values (?,?)", [key, val]); };
                        rs.close();
                        complete = true;
                    } catch (e) { }; //alert(e.message);
                    db.close();
                    return complete;
                },
                Get: function (name, key) {
                    var backval = "";
                    db.open("beta.database");
                    try {
                        var rs = db.execute("select itemkey,itemval from storage" + name + " where itemkey=?", [key]);
                        if (rs.isValidRow()) {
                            backval = rs.field(1);
                            backval = (backval == null || backval == undefined) ? "" : backval;
                        }
                        rs.close();
                    } catch (e) { };
                    db.close();
                    return backval;
                },
                Del: function (name, key) {
                    var complete = false;
                    db.open("beta.database");
                    try {
                        db.execute("delete from storage" + name + " where itemkey=?", [key]);
                        complete = true;
                    } catch (e) { };
                    db.close();
                    return complete;
                },
                Remove: function (name) {
                    var complete = false;
                    db.open("beta.database");
                    try {
                        db.execute("drop table storage" + name);
                        complete = true;
                    } catch (e) { };
                    close();
                    return complete;
                }
            }
        })();

        //localStorage和globalStorage方案(二者类似firefox,chrome,opear,ie8/9支持localStorage)
        var gs, ls;
        gs = ls = (function () {
            var storage = (o.ls) ? window.localStorage : (o.gs) ? window.globalStorage[location.hostname] : null;
            return {
                Set: function (name, key, val) {
                    var loadval = storage.getItem(name);
                    if (loadval == undefined || loadval == null) {
                        storage.setItem(name, key + "=" + val);
                    } else {
                        var array = loadval.split(";");
                        var len = array.length;
                        var addnew = true;
                        for (var i = 0; i < len; i++) {
                            if (array[i].indexOf(key + "=") == 0) {
                                array[i] = key + "=" + val;
                                addnew = false;
                                break;
                            }
                        }
                        if (addnew) {
                            array.push(key + "=" + val);
                        }
                        storage.setItem(name, array.join(";"));
                    }
                    return true;
                },
                Get: function (name, key) {
                    var backval = "";
                    var loadval = storage.getItem(name);
                    if (loadval != undefined && loadval != null) {
                        var array = loadval.split(";");
                        var len = array.length;
                        for (var i = 0; i < len; i++) {
                            if (array[i].indexOf(key + "=") == 0) {
                                backval = array[i].substr(array[i].indexOf("=") + 1);
                                break;
                            }
                        }
                    }
                    return backval;
                },
                Del: function (name, key) {
                    return this.Set(name, key, "");
                },
                Remove: function (name) {
                    if (storage.getItem(name)) {
                        storage.setItem(name, "");
                    }
                    return true;
                }
            }
        })();

        //flashShare方案,flash方案有一定的局限性,需要页面加载完成后才可以使用。
        var f = (function () {
            return {
                //外部循环检查flash对象是否准备妥当
                IsReady: function () {
                    return (flash.cache().set) ? true : false;
                },
                Set: function (name, key, val) {
                    flash.cache().set(name, key, val);
                },
                Get: function (name, key) {
                    return flash.cache().get(name, key);
                },
                Del: function (name, key) {
                    return flash.cache().del(name, key);
                },
                Remove: function (name) {
                    flash.cache().remove(name);
                }
            }
        })();

        //userData方案ie6/7, 该方案不支持跨页。
        var u = (function () {
            if (o.u) document.documentElement.addBehavior("#default#userdata");
            return {
                Set: function (name, key, val) {
                    with (document.documentElement) try {
                        load(name);
                        setAttribute(key, val);
                        save(name);
                        return true;
                    }
                    catch (e) {
                        return false;
                    }
                },
                Get: function (name, key) {
                    var backval = "";
                    with (document.documentElement) try {
                        load(name);
                        backval = getAttribute(key);
                        if (backval == undefined || backval == null) { backval = ""; }
                    } catch (e) { }
                    return backval;
                },
                Del: function (name, key) {
                    return this.Set(name, key, "");
                },
                Remove: function (name) {
                    with (document.documentElement) try {
                        load(name);
                        expires = new Date(315532799000).toUTCString();
                        save(name);
                        return true;
                    }
                    catch (e) { return false; }
                }
            }
        })();
        
        //服务器端保存方案,在ie6.0下才是必须使用的方式
        var t=(function(){
            return{
                Set:function(name,key,val){
                    var postdata = {"Do": "Set",name: name,Key:key,value: val};
                    var ret=false;
                    $.ajax({
                        url: "/Web/Handler1.ashx?action=SvrStorage",
                        type:"post",
                        data:postdata,
                        async: false,
                        success:function(){
                            ret=true;
                        },
                        error:function(){
                        }
                    });
                    return true;
                },
                Get:function(name,key){
                    var postdata = {"Do": "Get",name: name,Key:key};
                    var ret="";
                    $.ajax({
                        url: "/Web/Handler1.ashx?action=SvrStorage",
                        type:"post",
                        data:postdata,
                        async: false,
                        success:function(data){
                            ret=data;
                        },
                        error:function(){
                        }
                    });
                    return ret;
                },
                Del:function(name,key){
                    var postdata = {"Do": "Del",name: name,Key:key};
                    var ret=false;
                    $.ajax({
                        url: "/Web/Handler1.ashx?action=SvrStorage",
                        type:"post",
                        data:postdata,
                        async: false,
                        success:function(data){
                            ret=true;
                        },
                        error:function(){
                        }
                    });
                    return ret;
                },
                Remove:function(name){
                    var postdata = {"Do": "Remove",name: name};
                    var ret=false;
                    $.ajax({
                        url: "/Web/Handler1.ashx?action=SvrStorage",
                        type:"post",
                        data:postdata,
                        async: false,
                        success:function(data){
                            ret=true;
                        },
                        error:function(){
                        }
                    });
                    return ret;
                }
            }
        })();
        //Public方法
        return {
            Set: function (name, key, val) {
                for (var s in o) {
                    if (eval("o." + s)) {
                        return (eval(s + ".Set(\"" + name + "\",\"" + key + "\",\"" + encodeURIComponent(val) + "\")"));
                    }
                }
            },
            Get: function (name, key) {
                for (var s in o) {
                    if (eval("o." + s)) {
                        return decodeURIComponent(eval(s + ".Get(\"" + name + "\",\"" + key + "\")"));
                    }
                }
            },
            Del: function (name, key) {
                for (var s in o) {
                    if (eval("o." + s)) {
                        return (eval(s + ".Del(\"" + name + "\",\"" + key + "\")"));
                    }
                }
            },
            Remove: function (name) {
                for (var s in o) {
                    if (eval("o." + s)) {
                        return (eval(s + ".Remove(\"" + name + "\")"));
                    }
                }
            },
            IsReady: function () {
                for (var s in o) {
                    if (eval("o." + s)) {
                        if (s == "f") {//flash
                            return f.IsReady();
                        } else {
                            return true;
                        }
                        //return (eval(s + ".IsReady()"));
                    }
                }
            }
        }
    })();
})();

posted @ 2015-07-01 11:21  dongqinglove  阅读(251)  评论(0编辑  收藏  举报