2012-10-20 12 views
7

C'è un modo per due schede all'interno di un browser per condividere un Mutex (in JavaScript)?Mutex Lock (JS) Condiviso tra più schede di un browser?

Sto lavorando su una web-app usando node.js & socket.io, e voglio che le varie schede condividano una singola connessione con il server. La cosiddetta scheda 'leader' è l'unica che mantiene la connessione, mentre i messaggi al resto di essi vengono tutti inoltrati tramite questa. In questo momento, sto usando un algoritmo di elezione leader per scegliere il leader, ma dato che ci vuole un secondo o due per rieleggere un nuovo leader se quello attuale va giù, mi chiedo se c'è un metodo migliore per fare il stesso.

risposta

0

Ogni scheda è indipendente e, pertanto, i browser probabilmente non consentono a JS in una scheda di influire o di modificarne un'altra. Un'eccezione a quanto sopra è quando una scheda genera l'altra utilizzando JavaScript.

Tuttavia, si potrebbe guardare in un estensione Chrome o un Firefox Addon. Entrambi offrono la capacità che stai cercando.

flusso di lavoro alternativo:

Si potrebbe avere un padrone-scheda, che si apre il resto fino, utilizzando window.open(). La funzione restituisce un riferimento alla finestra aperta, che può quindi essere utilizzata insieme a window.postMessage().

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

Non è come le varie schede sono completamente isolate l'una dall'altra ... localStorage è un primo esempio di come condividere informazioni tra di loro. Quindi, se lo permetteranno, non sarebbe meglio creare canali adeguati per la comunicazione e la condivisione (ovviamente, tutti soggetti alla politica dello stesso dominio). Per quanto riguarda un'estensione/addon, ho pensato di prenderlo in considerazione, ma volevo una soluzione più indipendente dal browser. –

+1

Sì. Me ne ero dimenticato. Potresti consultare https://developer.mozilla.org/en-US/docs/DOM/window.postMessage. Ma avresti comunque bisogno di passare un riferimento ad un'altra finestra; –

+0

Ho già visitato questa pagina. Il problema * maggiore * con questo è che è necessario un riferimento alla finestra a cui si desidera inviare il messaggio. Non posso averlo. È qui che l'evento "storage" di localStorage vince, in quanto viene attivato su tutte le schede della stessa origine, indipendentemente dal modo in cui sono state aperte. –

Problemi correlati