У меня будет несколько фреймов на моей странице, и я буду интенсивно использовать sessionStorage внутри них. Что мне интересно, так это если у меня будут отдельные хранилища или один общий для всех iframe? Как применяются ограничения размера?sessionStorage in iframe
ответ
Хорошо, я сам сделал тест. По крайней мере, в Chrome (44) и Firefox (40) sessionStorage является общим для страницы, а iframes включены, если они одного домена, и не имеют, если они имеют разные домены.
Если 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.
_Local хранилище для домена. Все страницы из одного домена могут хранить и получать доступ к тем же данным. Таким образом, это определенно будет делиться данными локального хранилища между кадрами (при условии, что они принадлежат к одному домену). Хранилище сеансов - это вкладка браузера или окно, поэтому я предполагаю, что он использует отдельные хранилища, поскольку я всегда думаю о кадрах как о совершенно разных окнах. Это интересное и актуальное сообщение о безопасности браузера/кадра: http://stackoverflow.com/questions/2569768/how-to-communicate-between-frames – mikeecb
@mikeecb Мне не нужно локальное хранилище. Мне нужно хранилище сеансов. Думаю, то же самое, но я надеялся, что кто-то точно знает. – strannik