Je cherchais un moyen de communiquer entre plusieurs onglets ou fenêtres dans un navigateur (sur le même domaine, pas CORS) sans laisser de traces. Il y avait plusieurs solutions:
La première est probablement la pire solution - vous devez ouvrir une fenêtre à partir de votre fenêtre actuelle et vous ne pouvez communiquer que tant que vous gardez les fenêtres ouvertes. Si vous rechargez la page dans l'une des fenêtres, vous avez probablement perdu la communication.
La deuxième approche, utilisant postMessage, permet probablement une communication inter-origine, mais souffre du même problème que la première approche. Vous devez gérer un objet fenêtre.
Troisièmement, à l'aide de cookies, stockez certaines données dans le navigateur, ce qui peut effectivement ressembler à l'envoi d'un message à toutes les fenêtres du même domaine, mais le problème est que vous ne pouvez jamais savoir si tous les onglets lisent déjà ou non le "message". nettoyer. Vous devez mettre en œuvre une sorte de délai d'expiration pour lire le cookie périodiquement. De plus, vous êtes limité par la longueur maximale des cookies, qui est de 4 Ko.
La quatrième solution, utilisant localStorage, semble surmonter les limitations des cookies, et peut même être écoutée en utilisant des événements. Comment l'utiliser est décrit dans la réponse acceptée.
Edit 2018: la réponse acceptée fonctionne toujours, mais il existe une solution plus récente pour les navigateurs modernes, pour utiliser BroadcastChannel. Voir l'autre réponse pour un exemple simple décrivant comment transmettre facilement un message entre les onglets à l'aide de BroadcastChannel.