加载cookie后调用JavaScript函数

时间:2016-04-20 12:13:16

标签: javascript cookies

我有这段代码,我用它来向用户展示像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之前执行但是我找不到任何文档同意这个...任何想法如何处理这个问题?

2 个答案:

答案 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后显式执行该函数。