我在我的网站中有一些值,我希望在浏览器关闭时清除,我选择sessionStorage来存储该值,当选项卡关闭时清除它并在用户按f5时保持存储,但如果用户在不同的选项卡中打开一些链接这个值不可用.我如何在我的应用程序之间共享所有浏览器选项卡之间的sessionStorage值?
用例:将值放在某个存储中,在所有浏览器选项卡中保持该值可访问,如果所有选项卡都关闭则清除它.
if (!sessionStorage.getItem(key)) {
sessionStorage.setItem(key, defaultValue)
}
Run Code Online (Sandbox Code Playgroud) 在同一 URL 上打开多个选项卡或窗口会为每个选项卡或窗口创建 sessionStorage
https://stackblitz.com/edit/session-storage?file=index.js
输入您的姓名并点击“商店”
您的姓名现在存储在 sessionStorage 中,并且页面视图已更新。
sessionStorage.setItem('name', nameInput.value);
nameSpan.innerHTML = nameInput.value;
Run Code Online (Sandbox Code Playgroud)
现在点击“在新标签页中打开”
这将通过创建指向当前页面的链接元素并调用click()它来在新选项卡中打开页面
const link = document.createElement('a');
link.target = '_blank';
link.href = '/';
link.setAttribute('visibility', 'hidden');
document.body.appendChild(link);
link.click();
link.remove();
Run Code Online (Sandbox Code Playgroud)
如你所见,你的名字还在
为什么会发生这种情况,有没有办法用空 sessionStorage 打开新选项卡(不清除当前选项卡 sessionStorage)?
在 Chrome 75 和 Firefox 66 上对此进行了测试
不,它与 stackblitz 无关,在 localhost 上的行为方式相同
我需要在每个打开的浏览器选项卡上(在javascript对象中)都有一些唯一的ID.必须通过请求保存Id,我决定使用sessionStorage.
当我在浏览器中打开新页面时效果很好.
但是,当我通过鼠标右键单击链接并在IE 11中选择"在新选项卡中打开链接"时 - sessionStorage不为空.所以我对新id的期望失败了.
Chrome以另一种方式工作,sessionStorage为空.
有谁知道如何解决IE的这个问题?