Ich suchte nach einer Möglichkeit, zwischen mehreren Registerkarten oder Fenstern in einem Browser (in derselben Domäne, nicht in CORS) zu kommunizieren, ohne Spuren zu hinterlassen. Es gab mehrere Lösungen:
Die erste ist wahrscheinlich die schlechteste Lösung - Sie müssen ein Fenster von Ihrem aktuellen Fenster aus öffnen und können dann nur kommunizieren, solange Sie die Fenster geöffnet halten. Wenn Sie die Seite in einem der Fenster neu laden, haben Sie höchstwahrscheinlich die Kommunikation verloren.
Der zweite Ansatz, der postMessage verwendet, ermöglicht wahrscheinlich die Kommunikation zwischen den Ursprüngen, hat jedoch das gleiche Problem wie der erste Ansatz. Sie müssen ein Fensterobjekt pflegen.
Drittens können Sie mithilfe von Cookies einige Daten im Browser speichern. Dies kann so aussehen, als würden Sie eine Nachricht an alle Fenster in derselben Domain senden. Das Problem ist jedoch, dass Sie nie wissen können, ob alle Registerkarten die "Nachricht" bereits gelesen haben oder nicht Aufräumen. Sie müssen eine Art Zeitüberschreitung implementieren, um das Cookie regelmäßig zu lesen. Darüber hinaus sind Sie durch die maximale Cookie-Länge von 4 KB begrenzt.
Die vierte Lösung, die localStorage verwendet, schien die Einschränkungen von Cookies zu überwinden, und sie kann sogar mithilfe von Ereignissen abgehört werden. Wie man es benutzt, ist in der akzeptierten Antwort beschrieben.
Edit 2018: Die akzeptierte Antwort funktioniert immer noch, aber es gibt eine neuere Lösung für moderne Browser, um BroadcastChannel zu verwenden. In der anderen Antwort finden Sie ein einfaches Beispiel für die einfache Übertragung von Nachrichten zwischen Registerkarten mithilfe von BroadcastChannel.