为什么 Firefox 和 Chromium 之间的 cookie 行为不同

Why cookies behavior differ between Firefox and Chromium?

本文关键字:cookie Firefox Chromium 之间 为什么      更新时间:2023-09-26

我正在使用docCookies对象在此应用程序上设置cookie。

我正在测试的功能是这个:

displayWelcomeMessage = function(idElement){
    var cookieName = 'username';
    alert(docCookies.getItem(cookieName)); // NULL when cookie not set
    var defaultName = "SweetAnon",
        daysToExpire = 1,
        username = docCookies.getItem(cookieName);
    // Check if cookie was already set (user "logged")
    if (username != null && username.trim() != "") {
        displayUsername(idElement, username);
    } else {
        username = prompt("If you enter your name'nI'll try to remember you :)");
        if (username != null && username.trim() != "") {
            docCookies.setItem(cookieName, username, daysToExpire);
            displayUsername(idElement, username);
        } else {
            displayUsername(idElement, defaultName);
        }
    }
    alert(docCookies.getItem(cookieName)); // Username or 'SweetAnon'
};

这里有两个警报,它们在Firefox v28和Chromium v33.0.1750.152之间打印不同的结果。如果我输入foobar作为username,我会得到以下结果:

  • 火狐打印null然后foobar.
  • 铬 它打印null然后再次null

我认为火狐的行为是正确的。但是我应该怎么做才能让它在 Chromium 上运行?

解决方案是将 cookie 值分配给对象而不是变量:

displayWelcomeMessage = function(idElement)
  {
  var cookieName = 'username',
      defaultName = "SweetAnon",
      daysToExpire = 1;
  /* assign username as a property of the current function */
  this.username = docCookies.getItem(cookieName);
  alert(docCookies.getItem(cookieName)); // NULL when cookie not set
  // Check if cookie was already set (user "logged")
  if (this.username != null && this.username.trim() != "")
      {
      displayUsername(idElement, this.username);
      } 
    else 
      {
      this.username = prompt("If you enter your name'nI'll try to remember you :)");
      if (this.username != null && this.username.trim() != "") 
        {
        docCookies.setItem(cookieName, this.username, daysToExpire);
        displayUsername(idElement, username);
        } 
      else 
        {
        displayUsername(idElement, defaultName);
        }
      }
  alert(docCookies.getItem(cookieName)); // Username or 'SweetAnon'
  };

引用

  • 哪些设计模式利用了 JavaScript 的提升行为?
  • Chrome 和 Firefox 中的 JavaScript 提升
  • JavaScript 范围和提升
  • 有条件地定义函数