23

我听说 HTML5 有window.postMessage(),但似乎需要在您将消息发布到的窗口(或选项卡,在整个问题中)上有一个句柄。如果我想广播到所有打开的窗口怎么办?这可能吗?

(我想要做的是当用户在一个窗口中执行影响其他窗口的操作时警告其他窗口没有任何服务器往返,以便他们可以更新他们的内容。但是,虽然可以从现有窗口打开一些窗口-- 允许我截取和存储对它们的引用 -- 用户可以手动打开一些新窗口,然后选择书签或输入 URL。在这种情况下,似乎没有办法截取和存储引用.)

4

2 回答 2

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

于 2012-09-30T20:33:34.883 回答
20

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

于 2009-07-08T20:35:03.350 回答