iframe中的sessionStorage

时间:2015-08-27 11:26:01

标签: javascript iframe session-storage

我的页面上会有几个iframe,而且我会在其中使用sessionStorage。我很好奇的是,如果我将为所有iframe分别存储或共享存储空间?尺寸限制如何适用?

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:10)

如果共享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的内容会获得唯一来源。这意味着无论页面的真实来源如何,它都会获得不同的sessionStorage。您可以将<iframe sandbox="allow-same-origin">写入沙箱内容并让iframe的内容具有相同的来源(但仅当if具有相同的原点时)。

现在特别说明:沙盒iframe不支持localStorage per spec。在webkit浏览器和mozilla firefox中,如果沙盒iframe内容将尝试访问sessionStorage,则会抛出异常。