Объект Storage (как localStorage, так и sessionStorage) доступен на всех вкладках, на которых открыта одна и та же страница.
Однако (некоторые комментарии утверждают, что это неверно, но это неверное толкование документации), когда вы открываете новую вкладку, внутри создается новый объект хранилища. Это клон первого, поэтому содержание в этом месте такое же.
Они обрабатываются отдельно от этой точки, но вы синхронизируете их, прослушивая storage
событие в вашем коде.
Из http://dev.w3.org/html5/webstorage/#the-sessionstorage-attribute: (обратите внимание, что спецификации относятся к разработчикам)
Когда новый контекст просмотра верхнего уровня создается путем клонирования существующего контекста просмотра, новый контекст просмотра должен начинаться с тех же областей хранения сеанса, что и исходный, но с этого момента два набора должны рассматриваться как отдельные, не влияющие друг на друга. в любом случае. [...] Когда методы setItem(), removeItem() и clear() вызываются для объекта Storage x, который связан с областью хранения сеанса [...], то для каждого объекта Document, чей Объект Storage атрибута sessionStorage объекта окна связан с той же областью хранения, отличной от x, отправить уведомление о хранении.
То есть, когда хранилище изменяется на активной вкладке, событие storage
отправляется на все остальные вкладки (для того же источника), но не на активную вкладку, которая, конечно, не нужна, так как именно она модифицированный.
Используйте событие, чтобы прочитать поля key
и newValue
, чтобы обновить localSession
в текущем неактивные вкладки (на мероприятии также есть oldValue
). storageArea
содержит затронутый объект Storage (полезно, если вы используете как локальное, так и сеансовое хранилище).
Что касается "одного домена" - да, одни и те же данные будут доступны только для одного и того же происхождения (схема, домен и порт).
Отправка данных на сервер вполне возможна. Все, что хранится в хранилище (сессионное и локальное), хранится в виде строки. Однако я бы порекомендовал закодировать его (в формате JSON нет необходимости, так как он уже хранится в виде строки). Используйте напр.:
var dataForServer = encodeURIComponent(sessionStorage.getItem(myKey));
Затем отправьте его как часть формы, URL-адреса или с помощью ajax.
person
Community
schedule
28.05.2013