2015-08-27 133 views
4

我將在我的頁面上放置多個iframe,並且我將在其中密集使用sessionStorage。我很好奇的是,如果我有單獨的存儲空間,還是共享所有的iframe?尺寸限制如何應用?iframe中的sessionStorage

+0

_Local存儲是每個域。所有來自一個域的頁面都可以存儲和訪問相同的數據。因此,這肯定會在幀之間共享本地存儲數據(假設它們來自同一個域)。會話存儲是根據瀏覽器標籤或窗口,所以我猜想它使用單獨的存儲,因爲我總是認爲幀是完全不同的窗口。這是一個有趣的瀏覽器/框架安全相關閱讀:http://stackoverflow.com/questions/2569768/how-to-communicate-between-frames – mikeecb

+0

@mikeecb我不需要本地存儲。我需要會話存儲。我猜也一樣,但我希望有人知道肯定。 – strannik

回答

7

好的,我自己做了一個測試。至少在Chrome(44)和Firefox(40)中,如果sessionStorage屬於同一個域,並且不屬於不同的域,則會在頁面和包含的iframe之間共享sessionStorage。

3

如果sessionStorage是共享的,取決於iframe的頁面,它的起源是URL的域部分。如果您有一個網頁http://myserver/test.html,並且它包含http://thatserver/some.html通過iframe,則iframe的頁面具有域thatserver。因此,來源不同,sessionStorage不會被共享。但是,如果iframe的頁面是http://myserver/some.html,它具有相同的原點並且具有相同的原點。

現在有一個額外的技巧:iframe的sandbox屬性。如果您編寫的<iframe sandbox>沒有值allow-same-origin iframe的內容獲得唯一的原點。這意味着它會得到一個不同的sessionStorage,而不管頁面的真實來源。您可以將<iframe sandbox="allow-same-origin">寫入沙箱中,並讓iframe的內容具有相同的原點(但只有在確實具有相同的原點時)。

現在特別說明:沙盒iframes將不支持localStorage per spec。在webkit瀏覽器和Mozilla Firefox中,如果沙箱化的iframe內容嘗試訪問sessionStorage,則會引發異常。