首先,每个页面/标签都有自己的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
89版本之前,打开新页面都会拷贝SessionStorage,89之后的版本会严格按照标准行为执行拷贝。
另外,浏览器的Duplicate菜单通常也会拷贝SessionStorage。
Ctrl+鼠标单击的方式都不会拷贝SessionStorage。