使用JavaScript向所有打开的窗口/选项卡发送消息

时间:2009-07-08 20:20:54

标签: javascript html5 cross-window-scripting

我听说HTML5有window.postMessage(),但似乎需要在窗口(或整个此问题的标签)上设置一个句柄来发布消息。如果我要向所有打开的窗口广播怎么办?这可能吗?

(我正在尝试做的是警告其他窗口没有任何服务器往返,当用户在一个窗口中做一些影响其他窗口的事情时,他们可以更新他们的内容。但是,虽然有些窗口可能会被打开从现有的 - 允许我拦截和存储对它们的引用 - 一些新的窗口可以由用户手动打开,然后选择书签或URL输入。在这种情况下似乎没有办法拦截并存储参考文献。)

3 个答案:

答案 0 :(得分:26)

我写了一个库来做这件事: 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

答案 1 :(得分:19)

IMO使用postMessage是不可能的。使用 sessionStorage localStorage怎么样?写入它应该生成一个存储事件,该事件应该传播到共享同一会话存储的所有窗口。

答案 2 :(得分:1)