关于SessionStorage“共享” 的一些注意事项

143 阅读1分钟

首先,每个页面/标签都有自己的SessionStorage存储区,不同的页面/标签之间的存储区都是独立的,互不影响。也就是说,你在一个页面修改了SessionStorage里面的数据,是不会影响到其他页面的。

唯一需要注意的是,从一个页面上打开新的标签/窗口时,存在一个SessionStorage的拷贝过程,不过这个拷贝也是一次性的,拷贝完之后两个页面的SessionStorage就没有任何关系了。

那么有哪些情况会导致SessionStorage被拷贝呢?

先说一下标准是怎么定的吧

能够保留window.opener的,都会拷贝SessionStorage数据

比如,通过window.open函数打开:

window.open('index.html')

window.open()函数的第三个参数可以控制是否保留opener,比如这样就不会拷贝了:

window.open('index.html', '', 'noopener')

通过a标签的taget=_blank打开的新标签:

a元素上使用target=_blank相当于有一个隐式的rel=noopener

再说下实际的情况

Chrome

参考 Chrome 89 更新说明

89版本之前,打开新页面都会拷贝SessionStorage,89之后的版本会严格按照标准行为执行拷贝。

另外,浏览器的Duplicate菜单通常也会拷贝SessionStorage

Ctrl+鼠标单击的方式都不会拷贝SessionStorage