【发布时间】: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