2012-10-20 7 views
7

Gibt es eine Möglichkeit für zwei Tabs innerhalb eines Browsers einen Mutex (in JavaScript) zu teilen?Mutex Lock (JS) Wird zwischen mehreren Tabs eines Browsers geteilt?

Ich arbeite an einer Web-App mit node.js & socket.io, und ich möchte, dass die verschiedenen Registerkarten eine einzige Verbindung mit dem Server teilen. Der sogenannte 'Leader'-Tab ist der einzige, der die Verbindung aufrechterhält, während Nachrichten an den Rest von ihnen alle über diesen weitergeleitet werden. Im Moment benutze ich einen Führungswahlalgorithmus, um den Anführer zu wählen, aber da es ein oder zwei Sekunden dauert, einen neuen Anführer wieder zu wählen, wenn der aktuelle ausfällt, frage ich mich, ob es eine bessere Methode gibt gleich.

Antwort

0

Jede Registerkarte ist unabhängig und daher lassen Browser wahrscheinlich nicht zu, dass JS in einer Registerkarte einen anderen beeinflusst oder modifiziert. Eine Ausnahme besteht darin, dass die eine Registerkarte die andere mit JavaScript hervorbringt.

Sie könnten jedoch in eine Chrome-Erweiterung oder Firefox Addon suchen. Beide bieten die Fähigkeit, die Sie suchen.

Alternative Workflow:

Sie können ein Master-Register haben, die den Rest öffnet, mit window.open(). Die Funktion gibt einen Verweis auf das geöffnete Fenster zurück, das dann in Verbindung mit window.postMessage() verwendet werden kann.

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

Es ist nicht wie die verschiedenen Registerkarten sind vollständig isoliert voneinander ... localstorage ist ein Paradebeispiel für den Informationsaustausch zwischen ihnen. Also, wenn sie es zulassen, wird es nicht besser sein, richtige Kanäle für die Kommunikation und den Austausch zu schaffen (natürlich, alle unterliegen der gleichen Domain-Politik). Wie für eine Erweiterung/ein Addon, habe ich darüber nachgedacht, aber ich wollte eine browserunabhängigere Lösung. –

+1

Ja. Das hatte ich vergessen. Sie könnten https://developer.mozilla.org/en-US/docs/DOM/window.postMessage einsehen. Aber Sie müssen immer noch einen Verweis auf ein anderes Fenster übergeben. –

+0

Ich habe diese Seite schon einmal durchgegangen. Das * Major * -Problem besteht darin, dass Sie einen Verweis auf das Fenster benötigen, an das Sie die Nachricht senden möchten. Ich kann das nicht haben. Dies ist der Punkt, an dem das Storage-Ereignis von localStorage gewinnt, da es auf allen Registerkarten desselben Ursprungs ausgelöst wird, unabhängig davon, wie sie geöffnet wurden. –

Verwandte Themen