23

HTML5 にはwindow.postMessage(). 開いているすべてのウィンドウにブロードキャストしたい場合はどうすればよいですか? これは可能ですか?

(私がやろうとしているのは、ユーザーが1つのウィンドウで他のウィンドウに影響を与える何かを行ったときに、サーバーのラウンドトリップなしで他のウィンドウに警告して、コンテンツを更新できるようにすることです。ただし、一部のウィンドウは既存のウィンドウから開くことができますが、 --それらへの参照を傍受して保存できるようにする--ユーザーが手動でいくつかの新しいウィンドウを開き、ブックマークを選択するか、URLを入力する場合があります。この場合、参照を傍受して保存する方法はないようです。 .)

4

2 に答える 2

26

これを行うためのライブラリを作成しました: intercom.js (概要を説明したのと同じ理由で)。

現在、すべてのウィンドウに通知をブロードキャストするために使用しているため、サーバーへのソケット接続を維持する必要があるウィンドウは 1 つだけです。他の人が示唆したように、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 に答える