Javascript - 在Cookie上添加

时间:2017-05-23 04:35:45

标签: javascript jquery

我已经找到了答案,但似乎我找不到答案。 我的计划是在添加cookie后显示警告。

我使用setTimeout在5秒后设置了cookie。

脚本

setTimeout(
    function(){
        document.cookie = "username=Billy Joe";
    }, 5000);


我的方法是使用此代码检查cookie是否存在。

if(!getCookie("username")){
    alert("Cookie doesn't exists");
}else{
    alert("Cookie exists");
}


但看起来就像只检查第一次加载,而不是在添加cookie之后。
我的问题是如何在添加cookie后显示提醒?
非常感谢

3 个答案:

答案 0 :(得分:0)

  

我的问题是如何在添加Cookie后显示提醒?

很简单,只需在添加cookie后进行检查即可!

function checkCookie () {
  alert(getCookie("username") ? "Cookie exists!" : "Cookie doesn't exist!");
}

setTimeout(function () {
  document.cookie = "username=Billy Joe";
  checkCookie();
}, 5000);

答案 1 :(得分:0)

基本上setTimeout总是异步运行所以基本上你的if块在设置cookie值之前运行。你应该在添加cookie后使用函数。例如,您的超时功能是在5秒后运行/设置cookie值,但您的alter会立即读取setTimeout代码

以下示例适用于您。

function checkCookie(){
    if(!getCookie("username")){
        alert("Cookie doesn't exists");
    }else{
        alert("Cookie exists");
    }
}

// check before add
checkCookie()

setTimeout(function(){
    document.cookie = "username=Billy Joe";
    // check after add
    checkCookie();
}, 5000);

答案 2 :(得分:-1)

不幸的是,我在此上下文中发现了错误的API,因为该API是针对Mozilla Web扩展的。要注意它。唯一可行的技术是使用setInterval函数(参见https://www.experts-exchange.com/questions/22641766/Javascript-Call-function-as-soon-as-cookie-value-changes-Set-listener-for-changed-cookie-value.html)。但是,我宁愿不在该函数中设置cookie,因为它没有意义;):

var handledCookie = false;     // Was the cookie already handled?
var cookieCheckId = undefined; // The id of the checker

var handleCookie = function() {
  if (!getCookie("username")){
    alert("Cookie doesn't exists");
  } else {
    clearInterval(cookieCheckId); // Unset the check
    handledCookie = true;         // Set the cookie handled
    alert("Cookie exists");
  }
};

handleCookie();

if (!handledCookie) { 
  cookieCheckId = setInterval(handleCookie, 5000); // Handle the cookies
}

因此,如果在代码内部或外部创建cookie,则handleCookie函数将被调用一次。检查全部完成5秒。如果找到了cookie,则将禁用该检查(clearInterval)。

<强>错误!之前的回答:

你可以处理事件。如果cookie发生变化,则会触发一个事件(参见https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/cookies/onChanged)。

例如,您可以使用以下内容:

browser.cookies.onChanged.addListener(function(changeInfo) {
  if(!getCookie("username")){
    alert("Cookie doesn't exists");
  } else {
    alert("Cookie exists");
  }
});

您还可以查看changeInfo并使用该信息来识别您的Cookie:

browser.cookies.onChanged.addListener(function(changeInfo) {
  let cookie = JSON.stringify(changeInfo.cookie);
  if (cookie.name === 'username') {
    alert("Cookie exists");
  }
});

然而,你没有检查你的cookie是否不存在。