【问题标题】:Using Session storage to store whether a popup has been shown使用 Session 存储来存储弹窗是否已经显示
【发布时间】:2021-05-05 07:37:45
【问题描述】:

我有一个网站,我使用纯 HTML、CSS 和 JS 构建了一个弹出窗口。没有什么花哨。我选择在 15 秒后显示我的弹出窗口。因为我不想将弹出窗口显示给已经看过它的任何人,所以我想使用会话存储来存储我已显示弹出窗口的事实。

我想出了这个代码:

setTimeout(function() {
    var today = new Date();
    var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
    if (sessionStorage[mm+"_displayed"] != 'y'){
      var modal = document.getElementById("myModal");
      modal.style.display = "block";
      sessionStorage[mm+"_displayed"] = 'y';
    }
  }, 15000);

弹出窗口按预期在 15 秒后显示。我还可以在 Chrome 的开发者工具中看到会话存储值。但是我有时会注意到弹出窗口再次出现。

  • 我的比较有错吗?
  • 会话存储是否特定于每个选项卡?到目前为止,这就是我发现的,但这似乎违反直觉。会话是跨标签共享的,那么为什么不能使用会话存储呢?
  • 本地存储是否仍然“永远存在”?我找到了一个很棒的post on the topic and a workaround

谢谢

【问题讨论】:

  • 会话存储特定于页面的每个内存会话。所以选项卡是内存空间,因此将是该页面的唯一选项卡副本能够查看它。在同一个标​​签上?还在那里。不同的标签?走了。会议是一个独特的观点。 Cookie 是您在不同视图之间关联会话并将它们加入单个“会话”的方式。 Cookie 对域来说是唯一的。本地存储......非常本地化。

标签: javascript session


【解决方案1】:

sessionStorage 可用于浏览器中的选项卡。如果您想在浏览器选项卡之间共享数据,请使用 localStorage

另外,请注意,由于您使用的是today.getMonth(),因此弹出窗口将每月显示一次。

【讨论】:

  • 是的,我是故意这样做的,因为我想在一个月后强制弹出
猜你喜欢
  • 2016-07-20
  • 2012-09-30
  • 1970-01-01
  • 2021-10-25
  • 2016-06-15
  • 2021-11-11
  • 2021-11-27
  • 2020-07-13
  • 1970-01-01
相关资源
最近更新 更多