我有这段代码,我用它来向用户展示像popup一样,如果他们之前没有看到它。代码很简单,如下所示:
function setCookie(cname, cvalue, exdays) {
var now = new Date();
var time = now.getTime();
var expireTime = time + 1*36000;
now.setTime(expireTime);
document.cookie = 'seen_fb_like=true;cookie=ok;expires='+now.toGMTString()+';path=/';
}
function getCookie(cname) {
var value = "; " + document.cookie;
var parts = value.split("; " + cname + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
}
window.onload = function() {
var seen = getCookie("seen_fb_like");
if(!seen) {
document.getElementById('popup-container').style.display = ("block");
setCookie();
}
}
在我的本地计算机上,这段代码按照希望运行,但在将其部署到我的服务器后,我发现现在每次都看到弹出窗口,甚至在几秒钟之后看到它。我认为这可能是因为有时{} {}}函数在加载cookie之前执行但是我找不到任何文档同意这个...任何想法如何处理这个问题?
答案 0 :(得分:0)
读取cookie值没有任何异步。所以代码流没有问题。
您确定cookie是否存在缺陷的方式。如果cookie是第一个值,则代码将不会检测到它,因为那里没有分号。所以也许这就是它偶尔不起作用的原因,因为它是cookie中的第一项。
使用正则表达式方法检查cookie。 MDN Simple Cookie Framework有例子。
var docCookies = {
getItem: function (sKey) {
if (!sKey) { return null; }
return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
},
...
};
答案 1 :(得分:-2)
您可以提供getCookie
的重载,它接受回调函数,并在检索到所需的cookie后显式执行该函数。