首先,先理解下一个页面的sessionStorage是怎么回事。
1、当前A页面有sessionStorage值为123,我F5强刷页面,sessionStorage值还在不在?
答:在。
2、当前A页面有sessionStorage值为123,我复制A页面地址在浏览器新开一个TAB页面粘贴地址访问A页面,sessionStorage值123还在不在?
答:不在。
打开多个相同的 URL 的 Tabs 页面,会创建各自的
sessionStorage
。
3、当前A页面有sessionStorage值为123,我关闭A页面这个标签页,利用浏览器的打开历史记录页面恢复打开A页面,sessionStorage值还在不在?
答:在。
页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的页面会话。
4、多tab之间的sessionStorage能不能直接共享访问?
好了,回到问题本身,“多tab之间的sessionStorage能不能直接共享访问?”,不要一杆子打死就说no,这个问题的答案分多钟情况。
情况一:不同域名页面的sessionStorage能不能直接共享访问?
答:不能。
情况二:相同域名页面的sessionStorage能不能直接共享访问?
这里又分多种情况:
以下A、B都是同一个域名下面的,以“window.sessionStorage.setItem("这是第一个页面","123")”这个sessionStorage值为例子来讲。
1、A页面中通过点击按钮调用window.open('./B.html)打开B页面,我们可以看到B页面中sessionStorage和A页面的sessionStorage是一样。
通过a标签打开与window.open一样
<a href="./B.html" target="_block">这是跳转B页面的a标签</a>
答:B页面能访问到A页面的sessionStorage值。
由上情况又引出一个新问题,B页面到底是直接共享访问A页面的sessionStorage呢?还是复制了一份A页面的sessionStorage放到B页面呢?
探索过程:我们在A页面执行一遍window.sessionStorage.setItem("这是第一个页面","456"),将sessionStorage的值进行修改,我们可以看到A页面的sessionStorage已经发生改变,而在A页面sessionstorage值还是123时通过window.open打开的B页面sessionstorage值还是123
2、A页面中有sessionStorage值,我们直接复制B页面的地址在浏览器同一个窗口新建一个tab页面,输入B页面的地址回车打开B页面。
答:B页面不能复制访问到A页面的sessionStorage值。
综合以上情况,我们得出一个结论:
不同域名的sessionStorage不可以共享,同域名多窗口之间sessionStorage不可以共享状态!!!
但是在某些特定场景下:在本页面中以新页签或窗口打开的同源页面会
“
复制”
之前页面的sessionStorage。但也仅仅是复制,A页面修改了sessionStorage的话,已打开的B页面不同跟着更新sessionStorage值,除非你再在A页面新打开一个B页面。