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