Chrome 为什么在多个选项卡中保留sessionStorage?

snz8szmq  于 12个月前  发布在  Go
关注(0)|答案(3)|浏览(127)

Window.sessionStorage docs
在同一URL上打开多个选项卡或窗口会创建会话每个选项卡或窗口的存储
https://stackblitz.com/edit/session-storage?file=index.js
输入您的姓名并点击“存储”
您的姓名现在存储在sessionStorage中,页面视图已更新。

sessionStorage.setItem('name', nameInput.value);
nameSpan.innerHTML = nameInput.value;

字符串
现在点击“在新标签页中打开”
这将通过创建指向当前页面的link元素并在其上调用click()来在新选项卡中打开页面

const link = document.createElement('a');
link.target = '_blank';
link.href = '/';
link.setAttribute('visibility', 'hidden');
document.body.appendChild(link);
link.click();
link.remove();

如你所见你的名字还在

为什么会发生这种情况,有没有一种方法可以用空的sessionStorage打开新的选项卡(而不清除当前的选项卡sessionStorage)?

  • 已在Chrome 75和Firefox 66上测试 *
    更新

此问题已通过Chrome 89修复

3gtaxfhh

3gtaxfhh1#

停止克隆会话89版后使用noopener打开的窗口的存储https://www.chromestatus.com/feature/5679997870145536#details

x759pob2

x759pob22#

原因:

HTML标准更改为指定以_blank为目标的锚的行为应该像|rel=“noopener”|已设置。https://www.chromestatus.com/feature/6140064063029248
最近,Chrome 89的行为已经改变,以符合HTML标准规范:
停止克隆会话使用noopener打开的窗口的存储https://developer.chrome.com/blog/deps-rems-89/#stop-cloning-sessionstorage-for-windows-opened-with-noopener

解决方案:

将属性rel="opener"添加到a标记。
这将把sessionStorage复制到通过单击链接打开的新选项卡。

<a href="http://..." target="_blank" rel="opener">Link</a>

字符串

6xfqseft

6xfqseft3#

会话必须以这种方式工作,以便在您导航到同一应用程序中的另一个链接时保持状态。如果您想在没有该会话的情况下打开选项卡,请尝试使用隐身模式。隐身模式将打开具有新会话的窗口。
sessionStorage on new window isn't empty, when following a link with target="_blank"

相关问题