Cómo se usa window.postMessage a través de dominios?
Parece el punto de la ventana .postMessage es permitir la comunicación segura entre ventanas/marcos alojados en diferentes dominios, pero en realidad no parece permitir que en Chrome.
Este es el escenario:
- Incrustar un
- El
- Llamo a window.postMessage( some_data, page_on_A )
El
Recibo este mensaje de error en Chrome:
No se puede enviar un mensaje a A. El receptor tiene origen B .
Aquí está el código que registra un receptor de eventos de mensajes en la página en A:
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
También he intentado llamar window.postMessage(some_data, '*')
, pero todo lo que hace es suprimir el error.
Estoy perdiendo el punto aquí, es ventana.postMessage(...¿no es para esto? ¿O lo estoy haciendo terriblemente mal?
*Mime-type text / html, que debe permanecer.
3 answers
Aquí hay un ejemplo que funciona en Chrome 5.0.375.125.
La página B (contenido del 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:
De otra pregunta, se ve que los dominios(A y B aquí) deben tener un /
para que el postMessage
funcione correctamente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:37
Debe publicar un mensaje de frame al padre, después de cargado.
Guión de marco:
$(document).ready(function() {
window.parent.postMessage("I'm loaded", "*");
});
Y escucharlo en padre:
function listenMessage(msg) {
alert(msg);
}
if (window.addEventListener) {
window.addEventListener("message", listenMessage, false);
} else {
window.attachEvent("onmessage", listenMessage);
}
Utilice este enlace para obtener más información: http://en.wikipedia.org/wiki/Web_Messaging
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-04 10:36:57
Probablemente intente enviar sus datos desde mydomain.com to www.mydomain.com o al revés, NOTA que te perdiste "www". http://mydomain.com y http://www.mydomain.com son dominios diferentes a javascript.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-17 09:20:47