Enviando uma mensagem para todas as janelas / abas abertas usando JavaScript

votos
22

Ouço HTML5 tem window.postMessage(), mas parece que necessita de ter uma alça sobre a janela (ou guia, ao longo desta questão) que você está postando a mensagem. E se eu quiser para transmitir para todas as janelas abertas? Isso é possível?

(O que eu estou tentando fazer é alertar outras janelas, sem qualquer servidor round-trips quando um usuário faz algo em uma janela que afeta os outros, de modo que eles possam atualizar seu conteúdo. No entanto, enquanto algumas janelas podem ser abertas a partir dos já existentes --allowing me para interceptar e referências de loja para eles -. algumas janelas novas podem ser abertas manualmente pelo usuário e, em seguida, um marcador seleccionado ou URL digitada neste caso não parece ser uma maneira de interceptar e referências de loja .)

Publicado 08/07/2009 em 21:20
fonte usuário
Em outras línguas...                            


3 respostas

votos
26

Eu escrevi uma biblioteca para fazer exatamente isso: intercom.js (pelas mesmas razões que você esboçado).

No momento, estamos a usá-lo para transmitir notificações para todas as janelas, portanto, apenas uma janela precisa manter uma conexão de soquete para o servidor. Como alguns outros sugeriram, ele usa a API localStorage.

O uso é muito simples:

var intercom = Intercom.getInstance();

$('a').on('click', function() {
     intercom.emit('notice', {message: 'Something just happened!');
});

Para pegar a mensagem,

intercom.on('notice', function(notice) {
    console.log(notice.message);
});

A interface está concebida para imitar socket.io .

Respondeu 30/09/2012 em 21:33
fonte usuário

votos
19

IMO isso não é possível usar o postMessage. Que tal usar sessionStorage localStorage? Escrevendo para ele deve gerar um evento de armazenamento que devem ser propagadas para todas as janelas compartilhando o mesmo armazenamento de sessão.

Respondeu 08/07/2009 em 21:35
fonte usuário

Respondeu 16/01/2015 em 01:15
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more