链接到要测试的代码:https://jsbin.com/modocelume/edit?js,console
我的一个饼干总是空着。其余的读得很好。在实际应用中,它意味着读取URL参数。在那种情况下,我实际上可以改变哪一个为空,但它总是至少一个!
我可以看到cookie是在开发人员工具中设置的,它不是HTTP Only,并且到期很好。
有人对此有经验吗?
var urlParams = [
'utm_source',
'utm_medium',
'utm_campaign',
'utm_term',
'utm_content'
];
function createCookie(name, value, days, domain) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
var expires = '; expires=' + date.toGMTString();
} else {
var expires = '';
}
if (domain) {
var domain = '; domain=' + domain;
}
document.cookie = name + '=' + value + expires + domain + '; path=/';
}
function readCookie(name) {
var name = name + '=',
fields = document.cookie.split(';');
for(var i=0; i < fields.length; i++) {
var field = fields[i];
while (field.charAt(0)==' ') {
field = field.substring(1, field.length);
if (field.indexOf(name) == 0) {
return field.substring(name.length, field.length);
}
}
}
return null;
}
urlParams.forEach(function(param) {
createCookie(param, param, 365, '');
});
urlParams.forEach(function(param) {
console.log(readCookie(param));
});
我预计readCookie('utm_source')
的输出为utm_source
,但输出为null
。
谢谢你的帮助!
出于某种原因,你的utm_source
字段名称前面没有空格,所以你的while (field.charAt(0) === ' ')
没有为它开火。我将其更改为以下代码,现在似乎工作正常:
function readCookie(name) {
var name = name + '=',
fields = document.cookie.split(';');
for(var i=0; i < fields.length; i++) {
var field = fields[i].trim();
if (field.indexOf(name) == 0) {
return field.substring(name.length, field.length);
}
}
return null;
}