При первом запуске приложения происходит следующее:
- Набор приложений
openpages
ключ со значением Date.now()
. - Из-за 1. обработчик событий запуска
onLocalStorageEvent
событие. - Поскольку ключ
openpages
существует, он устанавливает ключ page_available
с помощью Date.now () - Когда запускаются следующие приложения, они находят
page_available
введите в хранилище (второе, если), предупреждение сработало, и я могу перенаправить их на страницу ошибки.
Вся идея здесь заключается в том, чтобы общаться между вкладками с помощью storage
событие, которое вызывается каждый раз, когда вы получаете доступ к localStorage
.
. Поэтому, когда страница загружается, она сначала получает доступ к клавише openpages
, чтобы вызвать событие storage
с помощью e.key == "openpages"
.
Только после этого регистрирует прослушиватель событий.Так что 2 происходит только тогда, когда вы загружаете страницу на второй вкладке.На второй вкладке событие запускается и слушатель события регистрируется.Поскольку событие storage
запускается для всех вкладок, выполняется прослушиватель событий первой вкладки (который уже зарегистрирован).
Tab 1 запускается событием storage
с e.key == "openpages"
и попадает в первый if
.Там он запускает событие storage
, получая доступ к клавише page_available
.
В этот момент слушатель события вкладки 2 реагирует на событие storage
, но на этот раз с e.key == "page_available"
и попадает во вторую if
где отображается предупреждение.
Обратите внимание, что если вы не закроете вкладки и не откроете больше вкладок, вкладка 3 вызовет событие storage
для всех остальных вкладок, и у вас будет несколько вкладок с предупреждениями.
Просто для справки:
Если вы хотите активировать предупреждение на первой, а не на второй вкладке, вы можете получить его с помощью этого кода:
// Broadcast that you're opening the page.
localStorage.openpage = Date.now();
var onLocalStorageEvent = function(e) {
if (e.key == "openpage") {
alert("One more page already open");
}
};
window.addEventListener('storage', onLocalStorageEvent);
Подробнее о localStorage
здесь .
Подробнее о addEventListener
здесь .