Szukałem sposobu, jak komunikować się między wieloma kartami lub oknami w przeglądarce (w tej samej domenie, a nie CORS) bez pozostawiania śladów. Rozwiązań było kilka:
Pierwsze jest prawdopodobnie najgorszym rozwiązaniem - musisz otworzyć okno z bieżącego okna, a wtedy możesz komunikować się tylko wtedy, gdy masz otwarte okna. Jeśli ponownie załadujesz stronę w którymkolwiek z okien, najprawdopodobniej stracisz komunikację.
Drugie podejście, wykorzystujące postMessage, prawdopodobnie umożliwia komunikację między źródłami, ale występuje ten sam problem, co pierwsze podejście. Musisz zachować obiekt okna.
Trzeci sposób, korzystając z plików cookie, przechowują w przeglądarce pewne dane, które w efekcie mogą wyglądać jak wysyłanie wiadomości do wszystkich okien w tej samej domenie, ale problem polega na tym, że nigdy nie wiadomo, czy wszystkie zakładki przeczytały już „wiadomość”, czy nie wcześniej sprzątanie. Musisz wprowadzić jakiś limit czasu, aby okresowo odczytywać plik cookie. Ponadto jesteś ograniczony maksymalną długością pliku cookie, która wynosi 4KB.
Czwarte rozwiązanie, wykorzystujące localStorage, wydawało się przezwyciężać ograniczenia plików cookie, a nawet można słuchać za pomocą zdarzeń. Sposób korzystania z niego opisano w zaakceptowanej odpowiedzi.
Edytuj 2018: zaakceptowana odpowiedź nadal działa, ale jest nowsze rozwiązanie dla nowoczesnych przeglądarek, aby używać BroadcastChannel. Zobacz drugą odpowiedź, aby zapoznać się z prostym przykładem opisującym, jak łatwo przesyłać wiadomości między kartami przy użyciu BroadcastChannel.