浏览器缓存
# 同一个网站下 localStorage 可以共享数据吗?
// Let's try to set a name in window 1 page 1
localStorage.setItem('name', 'fatfish')
// We try to read the current name in window 2 page 2
localStorage.getItem('name') // fatfish
2
3
4
答案是: 可以
# sessionStorage
可以在多个 Tab 之间共享数据吗?
%
来自 MDN:
只读 sessionStorage 属性访问当前源的会话存储对象。sessionStorage 与 localStorage 类似;不同之处在于,localStorage 中的数据不会过期,而 sessionStorage 中的数据会在页面会话结束时被清除。
每当文档加载到浏览器的特定选项卡中时,就会创建一个唯一的页面会话并将其分配给该特定选项卡。该页面会话仅对特定选项卡有效。
只要选项卡或浏览器打开,页面会话就会持续,并且在页面重新加载和恢复后仍然存在。
在新选项卡或窗口中打开页面会创建一个具有顶级浏览上下文值的新会话,这与会话 cookie 的工作方式不同。
使用相同的 URL 打开多个选项卡/窗口会为每个选项卡/窗口创建 sessionStorage。
复制选项卡会将选项卡的 sessionStorage 复制到新选项卡中。
请注意第三点!或者我们可以在这里找到答案!
假设我们在https://medium.com/page/1中写了这样一段代码:
btn.addEventListener('click', () => {
window.sessionStorage.setItem('name', 'fatfish')
window.open('https://medium.com/page/2')
})
2
3
4
我可以在 https://medium.com/page/2 获取名称值吗?
console.log(window.sessionStorage.getItem('name')) // null or fatfish?
是的,答案就是 fatfish。那么,我们确定 sessionStorage 可以在多个选项卡之间共享数据吗?
最终答案
让我们尝试再次继续执行 https://medium.com/page/1 上的一段代码。
window.sessionStorage.setItem('name', 'medium')
window.sessionStorage.setItem('age', '1000')
2
如果 sessionStorage 可以在不同窗口或选项卡之间共享数据,那么https://medium.com/page/2也可以获取name和age的最新值
console.log(window.sessionStorage.getItem('name')) // 111
console.log(window.sessionStorage.getItem('age')) // null
2
所以,我们可以得出结论
sessionStorage 不能在多个窗口或选项卡之间共享数据,但是,当通过 window.open 或链接打开新页面时,新页面会复制上一个页面的 sessionStorage。