(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()")); } } } } })(); })();