《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[i].substring(0,name.length+1)==(name+"=")){
cookie = cookies[i];
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[i] = a[i].split(':');
for(var i=0;i<a.length;i++){
this[a[i][0]] = decodeURIComponent(a[i][1]);
}
}

Cookie.prototype.store = function(daysToLive,path,domain,secure){
var cookieval = "";
for(var prop in this){
if((prop.charAt(0)=='$')||(typeof this[prop] == 'function'))
continue;
if(cookieval!="") cookieval += '&';
cookieval += prop + ':' + encodeURIComponent(this[prop]);
}
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[prop]!='function')
delete this[prop];
}
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;
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值