三月的雪 发表于 2013-1-29 08:48:54

《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]
查看完整版本: 《JavaScript权威指南》中的一个Cookie工具