Отправка сообщения на все открытые окна / вкладки с использованием JavaScript
Я слышал, HTML5 имеет window.postMessage()
, но, кажется, для этого нужно иметь дескриптор окна (или вкладки в этом вопросе), на который вы отправляете сообщение. Что если я хочу транслировать все открытые окна? Это возможно?
(То, что я пытаюсь сделать, это предупредить другие окна без каких-либо обходов сервера, когда пользователь делает в одном окне что-то, что влияет на другие, чтобы они могли обновить свое содержимое. Однако, хотя некоторые окна могут быть открыты из существующих - позволяет мне перехватывать и хранить ссылки на них - некоторые свежие окна могут открываться вручную пользователем, а затем выбирается закладка или вводится URL-адрес. В этом случае, похоже, нет способа перехватить и сохранить ссылки.)
3 ответа
ИМО это невозможно с помощью postMessage. Как насчет использования sessionStorage localStorage? Запись в него должна генерировать событие хранения, которое должно распространяться на все окна, совместно использующие одно хранилище сеанса.
Я написал библиотеку для этого: 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);
});
Интерфейс предназначен для имитации http://socket.io/.
Я рекомендую использовать https://github.com/studentIvan/dueljs Краткое описание: http://dueljs.studentivan.ru/ и документы: https://dueljs.readthedocs.org/en/latest/