我的页面上会有几个iframe,而且我会在其中使用sessionStorage。我很好奇的是,如果我将为所有iframe分别存储或共享存储空间?尺寸限制如何适用?
答案 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,则会抛出异常。