У меня есть некоторые значения на моем сайте, которые я хочу очистить при закрытии браузера. Я решил sessionStorage
хранить эти значения. Когда вкладка закрыта, они действительно очищаются и сохраняются, если пользователь нажимает клавишу f5; Но если пользователь открывает какую-либо ссылку на другой вкладке, эти значения будут недоступны.
Как я могу поделиться sessionStorage
значениями между всеми вкладками браузера с моим приложением?
Вариант использования: поместите значение в какое-то хранилище, оставьте его доступным на всех вкладках браузера и снимите его, если все вкладки закрыты.
if (!sessionStorage.getItem(key)) {
sessionStorage.setItem(key, defaultValue)
}
javascript
cross-browser
session-storage
Владимир Гордиенко
источник
источник
Ответы:
Вы можете использовать localStorage и его «хранилище» eventListener для передачи данных sessionStorage с одной вкладки на другую.
Этот код должен существовать на ВСЕХ вкладках. Он должен выполняться перед вашими другими сценариями.
Я проверял это в chrome, ff, safari, т.е. 11, т.е. 10, ie9
Этот метод "должен работать в IE8", но я не мог проверить его, так как мой IE зависал каждый раз, когда я открывал вкладку ... любую вкладку ... на любом веб-сайте. (хорошо, IE) PS: вам, очевидно, нужно будет включить JSON-прокладку, если вам нужна поддержка IE8. :)
Авторы этой статьи: http://blog.guya.net/2015/06/12/sharing-sessionstorage-between-tabs-for-secure-multi-tab-authentication/
источник
BroadcastChannel
сейчас это хороший инструмент для этого. developers.google.com/web/updates/2016/09/broadcastchannelИспользование
sessionStorage
для этого невозможно.Из документов MDN
Это означает, что вы не можете поделиться между вкладками, для этого вы должны использовать
localStorage
источник
path='/'
он очищался при закрытии окна браузера. Но о вкладках я понятия не имею прямо сейчас.localStorage
данные, происходит из-за того, что кто-то переходит в другой домен, на той же вкладке. Мне кажется, это приведет к неправильному удалениюlocalStorage
данных - вкладка не будет закрыта, и если человек вернется назад, он / она захочет получить данные снова, верно. Во всяком случае, это интересный подход, не думал об этом: -)Вы можете просто использовать
localStorage
и запомнить дату, в которую он был впервые созданsession cookie
. КогдаlocalStorage
«сессия» старше значения cookie, вы можете очиститьlocalStorage
Недостатком этого является то, что кто-то еще может прочитать данные после закрытия браузера, так что это не очень хорошее решение, если ваши данные являются конфиденциальными и конфиденциальными.
Вы можете сохранить свои данные в
localStorage
течение нескольких секунд и добавить прослушиватель событий дляstorage
события. Таким образом, вы узнаете, когда какая-либо из вкладок что-то написала,localStorage
и сможете скопировать ее содержимое вsessionStorage
, а затем просто очиститеlocalStorage
источник
На самом деле, глядя на другие области, если вы открываете с помощью _blank, он сохраняет sessionStorage, пока вы открываете вкладку, когда родительский элемент открыт:
В этой ссылке есть хороший jsfiddle для тестирования. sessionStorage в новом окне не пуст, при переходе по ссылке с target = "_ blank"
источник
Моим решением, чтобы сессионное хранилище не передавалось через вкладки, было создание localProfile и удаление этой переменной. Если эта переменная установлена, но мои переменные sessionStorage не идут дальше и повторно инициализируют их. Когда пользователь выходит из окна закрывается, уничтожьте эту переменную localStorage
источник
Вот решение для предотвращения среза сеанса между вкладками браузера для Java-приложения. Это будет работать для IE (JSP / Servlet)
1) первая страница JS
2) общий JS для всех страниц
3) web.xml - отображение сервлета
4) код сервлета
источник