javascript - open - ¿Cómo se usa window.postMessage en todos los dominios?
window open postmessage (3)
Aquí hay un ejemplo que funciona en Chrome 5.0.375.125.
La página B (contenido de iframe):
<html>
<head></head>
<body>
<script>
top.postMessage(''hello'', ''A'');
</script>
</body>
</html>
Tenga en cuenta el uso de top.postMessage
o parent.postMessage
no window.postMessage
aquí
La 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 y B deben ser algo así como http://domain.com
EDITAR:
A partir de otra pregunta , parece que los dominios (A y B aquí) deben tener una /
para que postMessage
funcione correctamente.
Parece que el punto de window.postMessage es permitir la comunicación segura entre ventanas / marcos alojados en diferentes dominios, pero en realidad no parece permitir eso en Chrome.
Aquí está el escenario:
- Incruste un <iframe> (con un
src
en el dominio B * ) en una página en el dominio A - El <iframe> termina siendo principalmente una etiqueta <script>, al final de la cual se ejecuta ...
- Llamo a window.postMessage ( some_data , page_on_A )
El <iframe> es definitivamente en el contexto del dominio B, y he confirmado que el javascript incrustado en ese <iframe> se ejecuta correctamente y llama a postMessage
con los valores correctos.
Recibo este mensaje de error en Chrome:
No se pudo publicar el mensaje en A. El destinatario tiene origen B
Aquí está el código que registra un detector de eventos de mensaje en la página de A:
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
También intenté llamar a window.postMessage(some_data, ''*'')
, pero todo lo que hace es suprimir el error.
¿Me estoy perdiendo el punto aquí, es window.postMessage (...) no destinado para esto? ¿O lo estoy haciendo horriblemente mal?
* Mime-type text / html, que debe permanecer.
Debería publicar un mensaje de fotograma a foto principal, una vez cargado.
secuencia de comandos de marco:
$(document).ready(function() {
window.parent.postMessage("I''m loaded", "*");
});
Y escúchalo en el padre:
function listenMessage(msg) {
alert(msg);
}
if (window.addEventListener) {
window.addEventListener("message", listenMessage, false);
} else {
window.attachEvent("onmessage", listenMessage);
}
Use este enlace para obtener más información: http://en.wikipedia.org/wiki/Web_Messaging
Probablemente intente enviar sus datos de midominio.com a www.midominio.com o en reversa, tenga en cuenta que omitió "www". http://mydomain.com y http://www.mydomain.com son dominios diferentes a javascript.