Eu estava procurando uma maneira de se comunicar entre várias guias ou janelas em um navegador (no mesmo domínio, não no CORS) sem deixar vestígios. Havia várias soluções:
A primeira é provavelmente a pior solução - você precisa abrir uma janela a partir da janela atual e só pode se comunicar desde que mantenha as janelas abertas. Se você recarregar a página em qualquer uma das janelas, provavelmente perderá a comunicação.
A segunda abordagem, usando o postMessage, provavelmente habilita a comunicação entre origens, mas sofre o mesmo problema da primeira abordagem. Você precisa manter um objeto de janela.
Terceira maneira, usando cookies, armazene alguns dados no navegador, que podem parecer efetivamente enviar uma mensagem para todas as janelas no mesmo domínio, mas o problema é que você nunca pode saber se todas as guias já leem ou não a "mensagem" antes limpando. Você precisa implementar algum tipo de tempo limite para ler o cookie periodicamente. Além disso, você está limitado pelo tamanho máximo do cookie, que é de 4KB.
A quarta solução, usando o localStorage, parecia superar as limitações dos cookies e pode até ser ouvida usando eventos. Como usá-lo é descrito na resposta aceita.
Editar 2018: a resposta aceita ainda funciona, mas há uma solução mais recente para navegadores modernos, para usar o BroadcastChannel. Veja a outra resposta para um exemplo simples que descreve como transmitir facilmente mensagens entre guias usando BroadcastChannel.