2015-08-27 2 views
4

У меня будет несколько фреймов на моей странице, и я буду интенсивно использовать sessionStorage внутри них. Что мне интересно, так это если у меня будут отдельные хранилища или один общий для всех iframe? Как применяются ограничения размера?sessionStorage in iframe

+0

_Local хранилище для домена. Все страницы из одного домена могут хранить и получать доступ к тем же данным. Таким образом, это определенно будет делиться данными локального хранилища между кадрами (при условии, что они принадлежат к одному домену). Хранилище сеансов - это вкладка браузера или окно, поэтому я предполагаю, что он использует отдельные хранилища, поскольку я всегда думаю о кадрах как о совершенно разных окнах. Это интересное и актуальное сообщение о безопасности браузера/кадра: http://stackoverflow.com/questions/2569768/how-to-communicate-between-frames – mikeecb

+0

@mikeecb Мне не нужно локальное хранилище. Мне нужно хранилище сеансов. Думаю, то же самое, но я надеялся, что кто-то точно знает. – strannik

ответ

7

Хорошо, я сам сделал тест. По крайней мере, в Chrome (44) и Firefox (40) sessionStorage является общим для страницы, а iframes включены, если они одного домена, и не имеют, если они имеют разные домены.

3

Если sessionStorage является общим, зависит от страницы iframe и ее происхождения, которая является частью домена URL. Если у вас есть веб-страница на http://myserver/test.html и она включает http://thatserver/some.html через iframe, страница iframe имеет домен thatserver. Таким образом, происхождение отличается, и sessionStorage не будет использоваться совместно. Но если страница iframe равна http://myserver/some.html, она имеет то же самое происхождение и будет иметь такое же происхождение.

Теперь есть дополнительный трюк: атрибут sandbox для iframe. Если вы пишете <iframe sandbox> без значения allow-same-origin, содержимое iframe получает уникальное имя. Это означает, что он получит другой сеансовый ресурс, независимо от реального происхождения этой страницы. Вы можете написать <iframe sandbox="allow-same-origin"> в песочницу содержимого. И пусть содержимое iframe будет иметь одинаковое происхождение (но только если у него действительно такое же происхождение).

Теперь специальные примечания: изолированные iframe не поддерживают localStorage per spec. А в webkit-браузерах и mozilla firefox будет выбрано исключение, если изолированное содержимое iframe будет пытаться получить доступ к sessionStorage.