iframe 中的会话存储

问题描述 投票:0回答:3

我的页面上将有几个 iframe,并且我将在其中大量使用 sessionStorage。我很好奇的是,我是否拥有单独的存储空间,还是为所有 iframe 共享一个存储空间?尺寸限制如何适用?

javascript iframe session-storage
3个回答
24
投票

sessionStorage 是否共享取决于 iframe 的页面及其来源,即 URL 的域部分。如果您有一个位于

http://myserver/test.html
的网页,并且它通过 iframe 包含
http://thatserver/some.html
,则该 iframe 的页面具有域
thatserver
。因此,来源不同,sessionStorage 不会被共享。但如果 iframe 的页面是
http://myserver/some.html
,它具有相同的起源,因此将共享相同的会话存储。

现在还有一个额外的技巧:iframe 的 sandbox 属性。如果您编写

<iframe sandbox>
而没有值
allow-same-origin
,则 iframe 的内容将获得 unique 原点。这意味着无论页面的真实来源如何,它都会获得不同的 sessionStorage。您可以编写
<iframe sandbox="allow-same-origin">
来沙箱内容并让 iframe 的内容具有相同的来源(但前提是 if 确实具有真正的相同来源)。

现在特别注意:沙盒 iframe 不支持 localStorage 根据规范。在 webkit 浏览器和 mozilla firefox 中,如果沙箱 iframe 内容尝试访问 sessionStorage,将会抛出异常。


18
投票

好的,我自己测试过。至少在 Chrome (44) 和 Firefox (40) 中,如果页面和 iframe 属于同一域,则 sessionStorage 在页面和 iframe 之间共享,如果它们属于不同域,则不会共享。


0
投票

我决定看看 Krassmus 的回答。不幸的是,当尝试在“沙盒”iframe 中使用 sessionStorage 时,Chrome 也会引发异常。

https://github.com/gormonn/sessionStorage-POC/tree/main

© www.soinside.com 2019 - 2024. All rights reserved.