Stavo cercando un modo per comunicare tra più schede o finestre in un browser (sullo stesso dominio, non su CORS) senza lasciare tracce. C'erano diverse soluzioni:
La prima è probabilmente la soluzione peggiore: è necessario aprire una finestra dalla finestra corrente e quindi è possibile comunicare solo finché si mantengono aperte le finestre. Se ricarichi la pagina in una qualsiasi delle finestre, molto probabilmente hai perso la comunicazione.
Il secondo approccio, utilizzando postMessage, probabilmente abilita la comunicazione tra origini, ma presenta lo stesso problema del primo approccio. È necessario mantenere un oggetto finestra.
Terzo modo, utilizzando i cookie, memorizza alcuni dati nel browser, che può effettivamente sembrare come inviare un messaggio a tutte le finestre sullo stesso dominio, ma il problema è che non puoi mai sapere se tutte le schede leggono il "messaggio" già o no prima pulire. Devi implementare una sorta di timeout per leggere periodicamente il cookie. Inoltre sei limitato dalla lunghezza massima dei cookie, che è 4KB.
La quarta soluzione, utilizzando localStorage, sembrava superare i limiti dei cookie e può persino essere ascoltata usando gli eventi. Come usarlo è descritto nella risposta accettata.
Modifica 2018: la risposta accettata funziona ancora, ma esiste una soluzione più recente per i browser moderni, per utilizzare BroadcastChannel. Vedi l'altra risposta per un semplice esempio che descrive come trasmettere facilmente messaggi tra le schede usando BroadcastChannel.