Это старый вопрос, но, похоже, ни один из приведенных выше ответов не идеален.
В случае, если вы хотите сохранить аутентификацию или любую конфиденциальную информацию, которая уничтожается только при закрытом браузере, вы можетеполагайтесь на sessionStorage
и localStorage
для передачи сообщений в кросс-таблице.
По сути, идея такова:
- Вы загружаетесь с предыдущей открытой вкладки, таким образом, обе ваши
localStorage
и sessionStorage
пусты (если нет, вы можете очистить localStorage
).Вам необходимо зарегистрировать прослушиватель событий сообщения на localStorage
. - . Пользователь аутентифицирует / создает конфиденциальную информацию на этой вкладке (или любой другой вкладке, открытой в вашем домене).
- Вы обновляете
sessionStorage
для хранения конфиденциальной информации и используете localStorage
для хранения этой информации, а затем удаляете ее (здесь вам не нужно время, так как событие было поставлено в очередь при изменении данных).Любая другая вкладка, открытая в то время, будет отозвана по событию сообщения и обновит свои sessionStorage
конфиденциальной информацией. - Если пользователь откроет новую вкладку в вашем домене, его
sessionStorage
будетбыть пустымКод должен установить ключ в localStorage
(например: req
).Любая (все) другая вкладка будет вызвана обратно в событии сообщения, увидит этот ключ и может ответить секретной информацией из их sessionStorage
(как в 3), если они есть.
Обратите внимание, что эта схема не зависит от события window.onbeforeunload
, которое является хрупким (так как браузер может быть закрыт / аварийно завершен без запуска этих событий).Кроме того, время хранения конфиденциальной информации на localStorage
очень мало (поскольку вы полагаетесь на обнаружение изменения переходных процессов для события сообщения перекрестной табуляции), поэтому маловероятно, что такая конфиденциальная информация просачивается на жесткий диск пользователя.
Вот демонстрация этой концепции: http://jsfiddle.net/oypdwxz7/2/