Отправка сообщения во все открытые окна / вкладки с помощью JavaScript [дублировать]

StackOverflow https://stackoverflow.com/questions/1100336

Вопрос

На этот вопрос уже есть ответ здесь:

Я слышал, что HTML5 имеет window.postMessage(), но, похоже, для этого требуется наличие дескриптора в окне (или вкладке, на протяжении всего этого вопроса), в которое вы отправляете сообщение.Что делать, если я хочу транслировать во все открытые окна?Возможно ли это?

(Что я пытаюсь сделать, так это предупреждать другие окна без каких-либо обходов сервера, когда пользователь делает что-то в одном окне, что влияет на другие, чтобы они могли обновлять свой контент.Однако, хотя некоторые окна могут быть открыты из существующих, что позволяет мне перехватывать и сохранять ссылки на них, некоторые новые окна могут быть открыты пользователем вручную, а затем выбрана закладка или введен URL-адрес.В этом случае, похоже, не существует способа перехватывать и сохранять ссылки.)

Это было полезно?

Решение

ИМО, это невозможно с помощью postMessage.Как насчет использования Хранилище сеансовЛокальное хранилище?Запись в него должна сгенерировать событие storage, которое должно быть распространено на все окна, совместно использующие одно и то же хранилище сеансов.

Другие советы

Я написал библиотеку именно для этого: intercom.js (по тем же причинам, которые вы изложили).

В настоящее время мы используем его для трансляции уведомлений во все окна, поэтому только одно окно должно поддерживать сокет-соединение с сервером.Как предлагали некоторые другие, он использует localStorage API.

Использование действительно простое:

var intercom = Intercom.getInstance();

$('a').on('click', function() {
     intercom.emit('notice', {message: 'Something just happened!');
});

Чтобы перехватить сообщение,

intercom.on('notice', function(notice) {
    console.log(notice.message);
});

Интерфейс разработан таким образом, чтобы имитировать socket.io.

Я рекомендую использовать https://github.com/studentIvan/dueljs Краткий обзор: http://dueljs.studentivan.ru и документы: https://dueljs.readthedocs.org/en/latest/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top