Это интересная проблема.
Мы можем попробовать эти API:
postMessage, sessionStorage, localStorage, webRtc
BroadcastChannel очень хорошо подходит:
BroadcastChannel позволяет скрипты из того же происхождения, но другие
просмотр контекстов (окна, рабочие) для отправки друг другу сообщений.
Интерфейс BroadcastChannel представляет собой именованный канал, который любой
на контекст просмотра данного источника можно подписаться. Это позволяет
связь между разными документами (в разных окнах, вкладках,
кадры или фреймы) того же происхождения. Сообщения транслируются через
событие сообщения сработало во всех объектах BroadcastChannel, прослушивающих
канал.
Он отличается от API postMessage тем, что дочерние окна не должны быть объявлены на родительской странице. Так больше нет ни родителей, ни детей.
Пример отправки:
new BroadcastChannel('myapp').postMessage('Hello?');
Пример получения:
new BroadcastChannel('myapp').addEventListener('message', function(e){
console.log(e.data)
})
Таким образом, мы можем считать вкладки или даже сообщать текущие активные состояния другим вкладкам и т. Д.
-
( апрель 2019 ) Отзыв об использовании с этого поста. API BroadcastChannel довольно прост, но позволяет переосмыслить архитектуры .
Это позволяет импортировать модули, чтобы общаться друг с другом, это упрощает составление сценариев.
Я не испытываю необходимости в составленных веб-скриптах для создания сложных вещей. Мы можем обмениваться объектами, закодированными в json, по каналам, при необходимости вызывать «сервис», разделять логику, шаблоны, фабрики, события, сервисы.
Это место для использования памяти и производительности. Мы можем создать много каналов, параллельно передавая большой поток данных, это никак не повлияет на оперативную память / процессор и скорость отклика интерфейса.
Меньше переменных, меньше логики, данные, передаваемые напрямую. Стиль кодирования очень похож на веб-сокеты, это просто локальный сокет.
Broadcast_Channel_API
https://caniuse.com/#feat=broadcastchannel