Come usi window.postMessage attraverso i domini?

Sembra che il punto di window.postMessage sia consentire comunicazioni sicure tra windows / frame ospitati su domini diversi, ma in realtà non sembra consentirlo in Chrome.

Ecco lo scenario:

  1. Incorpora un (con un src sul dominio B * ) in una pagina sul dominio A
  2. finisce per essere principalmente un tag , al termine del quale l’esecuzione è …
  3. Chiamo window.postMessage ( some_data , page_on_A )

è sicuramente nel contesto del dominio B, e ho confermato che il javascript incorporato in quel viene eseguito correttamente e chiama postMessage con i valori corretti.

Ottengo questo messaggio di errore in Chrome:

Imansible inviare un messaggio ad A. Il destinatario ha origine B.

Ecco il codice che registra un listener di eventi messaggio nella pagina su A:

 window.addEventListener( "message", function (event) { // Do something }, false); 

Ho anche provato a chiamare window.postMessage(some_data, '*') , ma tutto ciò che fa è sopprimere l’errore.

Mi manca solo il punto qui, window.postMessage (…) non è pensato per questo? O sto semplicemente sbagliando?

* Mime-type text / html, che deve rimanere.

Ecco un esempio che funziona su Chrome 5.0.375.125.

La pagina B (contenuto iframe):

       

Nota l’uso di top.postMessage o parent.postMessage not window.postMessage qui

La pagina A:

        

A e B devono essere qualcosa come http://domain.com

MODIFICARE:

Da un’altra domanda , sembra che i domini (A e B qui) debbano avere un / per il postMessage per funzionare correttamente.

Dovresti pubblicare un messaggio da frame a genitore, dopo averlo caricato.

sceneggiatura del frame:

 $(document).ready(function() { window.parent.postMessage("I'm loaded", "*"); }); 

E ascoltalo in genitore:

 function listenMessage(msg) { alert(msg); } if (window.addEventListener) { window.addEventListener("message", listenMessage, false); } else { window.attachEvent("onmessage", listenMessage); } 

Usa questo link per maggiori informazioni: http://en.wikipedia.org/wiki/Web_Messaging

Probabilmente proverai a inviare i tuoi dati da mydomain.com a http://www.mydomain.com o viceversa, NOTA hai perso “www”. http://mydomain.com e http://www.mydomain.com sono diversi domini di javascript.