《JavaScript权威指南》中的一个Cookie工具
《JavaScript权威指南》(第五版)中的一个Cookie工具,但是其中一处代码在IE下有问题,关掉所有IE窗口后cookie value没有保存。原因是IE6,7,8,9都没有很好的支持max-age属性,所以针对IE使用expires属性代替。
以下是我修改后的代码。
Cookie.js
function Cookie(name){ this.$name = name; var allcookies = document.cookie; if(allcookies=="")return; var cookies = allcookies.split(';'); var cookie = null; for(var i=0; i<cookies.length; i++){ if(cookies.substring(0,name.length+1)==(name+"=")){ cookie = cookies; break; } } if(cookie==null) return; var cookieval = cookie.substring(name.length+1); var a = cookieval.split('&'); for(var i=0; i<a.length; i++) a = a.split(':'); for(var i=0;i<a.length;i++){ this] = decodeURIComponent(a); }}Cookie.prototype.store = function(daysToLive,path,domain,secure){ varcookieval = ""; for(var prop in this){ if((prop.charAt(0)=='$')||(typeof this == 'function')) continue; if(cookieval!="") cookieval += '&'; cookieval += prop + ':' + encodeURIComponent(this); } var cookie = this.$name + "=" + cookieval; if(daysToLive||daysToLive==0){ if(window.ActiveXObject){ //update for ie 6,7,8,9 var nDaysLater = (new Date()).getTime() + (daysToLive*24*60*60*1000); cookie += "; expires=" + (new Date(nDaysLater)).toGMTString(); } else cookie += "; max-age=" + (daysToLive*24*60*60); } if(path) cookie += "; path=" + path; if(domain)cookie += "; domain" + domain; if(secure)cookie += "; secure"; document.cookie = cookie;}Cookie.prototype.remove = function(path,domain,secure){ for(var prop in this){ if(prop.charAt(0)!='$' && typeof this!='function') delete this; } this.store(0,path,domain,secure);}Cookie.enabled = function(){ if(navigator.cookieEnabled != undefined) return navigator.cookieEnabled; if(Cookie.enabled.cache != undefined) return Cookie.enabled.cache; if(window.ActiveXObject) //update for ie 6,7,8,9 document.cookie = "testcookie=test; expires=" + (new Date((new Date()).getTime() + (10000*1000))).toGMTString(); else document.cookie = "testcookie=test; max-age=10000"; var cookies = document.cookie; if(cookies.indexOf("testcookie=test") == -1){ return Cookie.enabled.cache = false; }else{ if(window.ActiveXObject) //update for ie 6,7,8,9 document.cookie = "testcookie=test; expires=" + (new Date((new Date()).getTime() - (10000*1000))).toGMTString(); else document.cookie = "testcookie=test; max-age=0"; return Cookie.enabled.cache = true; }}
页:
[1]