【问题标题】:sessionStorage is cleared when you open a link on a new tab, but preserved when the link is opened on the same tab. Why?sessionStorage 在新选项卡上打开链接时会被清除,但在同一选项卡上打开链接时会保留。为什么?
【发布时间】:2021-05-05 10:32:30
【问题描述】:

我有一个带有 target="_blank 属性的锚标记,它在新选项卡上打开一个 HTML 页面,并且该新 HTML 页面链接到具有以下代码的 JS 文件:

 if (sessionStorage.getItem("washerebefore") === "yes") {
     location.href = "url of my main page";
 }

 sessionStorage.setItem("washerebefore", "yes");

这个想法显然是如果你点击链接,打开新的 HTML 页面,在那里刷新,重定向回主页,它工作正常.. 但只要新的 HTML 页面在新选项卡上打开。如果我删除target="_blank 并在同一个选项卡上打开页面,它只会在第一次工作,因为第二次单击我会立即重定向回来,这意味着 sessionStorage 不会被清除。为什么?

我在某处读到只有在您关闭浏览器时才会清除 sessionStorage,但如果是这种情况,那么为什么当我在新标签页上打开链接时它会被清除?

更新

我尝试改用 localStorage,但尽管明确删除了 localStorage,它仍然保留。

 if (localStorage.getItem("washerebefore") === "yes") {
     localStorage.removeItem("washerebefore")
     location.href = "url of my main page";
 }

 localStorage.setItem("washerebefore", "yes");

为什么刷新时没有删除localStorage?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    当您开始一个新会话时,保存在 sessionStorage 中的所有内容都会被删除。当浏览器关闭时会话结束。重新加载页面时会话仍然存在。打开新选项卡时会创建一个新会话,这就是发生此错误的原因。

    【讨论】:

    • 我明白了。那么,当您被重定向回上一页时,如何确保清除 sessionStorage?我应该改用 localStorage 并在刷新时清除它吗?
    • 我会使用本地存储,因为会话关闭时保存的数据不会被删除。因此,您可以更好地控制要删除并保留在本地存储中的内容。
    • 我只是尝试改用localStorage,并在location.href 之后添加removeItem,同样,它只在第一次工作,然后我不断被重定向。为什么它没有被删除?我做错了吗?
    • 你能看一下我的更新吗?我想为什么它没有被删除。问题是,它确实被删除了,但随后又被保存了,但是为什么要执行第二个 localStorage.setItem 呢?既然页面应该被重定向,代码的执行不应该停在那里吗?
    • 据我了解,第二个 localStorage.setItem 被执行,因为您退出了 if 语句。也许尝试一个 else 语句,尽管我不确定这是否可行
    猜你喜欢
    • 2021-09-21
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2012-04-25
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多