Для репликации:Как одна вкладка GitHub знает, когда я вошел на другой
- Открыть две GitHub вкладки, на которых вы оба вошли в
- Вход из одной вкладки.
- В верхней части вкладки 2 вы почти сразу же получить уведомление, что вы вошли на другую вкладку
Я пытался выяснить, как это работает. Поскольку уведомление почти сразу я рассмотрел 3 возможности:
- Каждая вкладка делает XHR/AJAX запросы по расписанию, чтобы проверить сессионный действительность с сервером (или использует длинный опрос)
- Каждая вкладка регистрирует слушатель событий для Server Sent Events и получает уведомление от сервера при выходе из системы.
- Каждая вкладка имеет подключение к серверу через веб-соединение и получает аналогичное уведомление.
Для справки, эти технологии: discussed here. Я в тупике, потому что, когда я открываю инструмент для сетевых запросов веб-браузера (Firefox 48 beta), я не вижу связи на вкладке, которая показывает уведомление между моментом, когда я выхожу из другой вкладки, и временем появления уведомления.
Кстати, уведомление работает в обратном направлении. Если у вас две вкладки вышли из системы, и вы входите в один из них, уведомление сразу же появляется на другой вкладке, в которую вы вошли. Что происходит?
Еще одно уточнение: на самом деле есть событие для локальной модификации хранилища https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API и GitHub, скорее всего, использует его. – jcdenton
Интересно; Я не думал об этом. Если я вручную (используя инструменты разработчика в Firefox) изменяет значение локального хранилища от «true» до «false», всплывающее окно не появляется. Как так? – BeetleJuice
Возможно, Firefox не запускает соответствующее событие для фокусировки на вкладке при изменении локального хранилища. Или GitHub использует некоторые посвященные для Firefox механики. Во всяком случае, отлично работает, если вы открываете 2 или более вкладки. –