2012-10-20 7 views
7

ブラウザ内の2つのタブでミューテックス(JavaScript)を共有する方法はありますか?ミューテックスロック(JS)ブラウザの複数のタブ間で共有されますか?

node.js & socket.ioを使用してWebアプリケーションを開発しています。さまざまなタブでサーバーとの単一の接続を共有したいと考えています。 「リーダー」タブと呼ばれるものは、接続を維持する唯一のタブですが、残りの部分へのメッセージはすべてこの経由で中継されます。現在、私は指導者選出アルゴリズムを使用して指導者を選んでいますが、現在の指導者が落ちれば新しい指導者を選出するには2〜3秒かかります。同じ。

答えて

0

各タブは独立しているため、ブラウザはおそらく1つのタブのJSが他のタブに影響を与えたり、別のタブを変更することを許可しません。上記の1つの例外は、1つのタブがJavaScriptを使用して別のタブを生成する場合です。

ただし、のChrome拡張子またはFirefox Addonを調べることができます。どちらも、あなたが探している機能を提供します。

代替ワークフロー:

あなたはwindow.open()を使用して、残りを開き1マスタータブを、持っている可能性があります。この関数は、開いたウィンドウへの参照を返します。window.postMessage()と組み合わせて使用​​することができます。

var windowObjectReference = window.open(strUrl, strWindowName[, strWindowFeatures]); 
//windowObjectReference is a reference to the newly created window. 
+1

さまざまなタブが互いに完全...のlocalStorageから隔離されているようではないです情報を共有する方法の主要な例その間にしたがって、もし彼らがそれを許可しようとするならば、コミュニケーションと共有のための適切なチャンネルを作る方が良いでしょう(もちろん、すべてが同じドメインポリシーの対象です)。 拡張機能/アドオンについては、私はそれを考えると思いましたが、私はもっと独立したブラウザのソリューションを望んでいました。 –

+1

うん。私はそれを忘れていた。あなたはhttps://developer.mozilla.org/en-US/docs/DOM/window.postMessageを見ることができます。しかし、あなたはまだ別のウィンドウへの参照を渡す必要があります。 –

+0

私は前にこのページを通過しました。これに関する*大きな問題は、メッセージを送信するウィンドウへの参照が必要なことです。私はそれをすることはできません。これは、localStorageの 'storage'イベントがどのように開かれたかにかかわらず、同じ原点のすべてのタブでトリガーされるので、localStorageの 'storage'イベントが勝ちます。 –

1

直接ロックの問題を解決したり、ビルディングブロックとして使用することができ、タブ、間を通過するメッセージを提供しようとするいずれかの様々なライブラリがあります。 チェックアウト:

関連する問題