多tab之间的sessionStorage能不能直接共享访问?

首先,先理解下一个页面的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页面。

猜你喜欢

转载自blog.csdn.net/tt18473481961/article/details/131569918