Parece que o objetivo de window.postMessage é permitir a comunicação segura entre janelas / frames hospedados em domínios diferentes, mas na verdade não parece permitir isso no Chrome.
Este é o cenário:
- Incorpore um <iframe> (com um
src
no domínio B * ) em uma página no domínio A - O <iframe> acaba sendo principalmente uma tag <script>, no final da execução ...
- Eu chamo window.postMessage ( some_data , page_on_A )
O <iframe> está definitivamente no contexto do domínio B, e eu confirmei que o javascript embutido naquele <iframe> é executado corretamente e chama postMessage
com os valores corretos.
Recebo esta mensagem de erro no Chrome:
Não é possível para postar mensagem para A . Destinatário tem origem B .
Este é o código que registra um listener de evento de mensagem na página A:
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
Também tentei ligar window.postMessage(some_data, '*')
, mas tudo o que faço é suprimir o erro.
Estou apenas perdendo o ponto aqui, window.postMessage (...) não foi feito para isso? Ou estou apenas fazendo terrivelmente errado?
* Mime-type text / html, que deve permanecer.
fonte
Respostas:
Aqui está um exemplo que funciona no Chrome 5.0.375.125.
A página B (conteúdo do iframe):
<html> <head></head> <body> <script> top.postMessage('hello', 'A'); </script> </body> </html>
Observe o uso de
top.postMessage
ouparent.postMessage
nãowindow.postMessage
aquiA página A:
<html> <head></head> <body> <iframe src="B"></iframe> <script> window.addEventListener( "message", function (e) { if(e.origin !== 'B'){ return; } alert(e.data); }, false); </script> </body> </html>
A e B devem ser algo como
http://domain.com
EDITAR:
De outra pergunta , parece que os domínios (A e B aqui) devem ter um
/
parapostMessage
que funcione corretamente.fonte
postMessage
Você deve postar uma mensagem do quadro ao pai, depois de carregada.
script de quadro:
$(document).ready(function() { window.parent.postMessage("I'm loaded", "*"); });
E ouça no pai:
function listenMessage(msg) { alert(msg); } if (window.addEventListener) { window.addEventListener("message", listenMessage, false); } else { window.attachEvent("onmessage", listenMessage); }
Use este link para obter mais informações: http://en.wikipedia.org/wiki/Web_Messaging
fonte
Provavelmente você está tentando enviar seus dados de mydomain.com para www.mydomain.com ou vice-versa, NOTE que você perdeu "www". http://mydomain.com e http://www.mydomain.com são domínios diferentes para javascript.
fonte
file:///
É possível obter erros de domínio ao extrair conteúdo apenas do sistema de arquivos local?