opener open onmessage from event ejemplo javascript html5 google-chrome xss

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:

  1. Incruste un <iframe> (con un src en el dominio B * ) en una página en el dominio A
  2. El <iframe> termina siendo principalmente una etiqueta <script>, al final de la cual se ejecuta ...
  3. 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.