2012-01-11 18 views
50

Ho seguito questo tutorial - http://www.youtube.com/watch?v=R2hOvZ7bwXU, che spiega in pratica come utilizzare PostMessage di passare in modo sicuro un messaggio tra iframe e genitore - che, fondamentalmente, finisce con qualcosa di simile - http://html5demos.com/postmessage2Html5 - Cross browser Iframe post-messaggio - da bambino a genitore?

Il mio problema è che ho bisogno lavorare in senso inverso (da bambino a genitore) e non so come indirizzare la finestra genitore.

questo è il mio codice ricevitore (nel genitore) -

function handlingMsg(e) 
{alert("works") 
    if(e.origin == "http://uc.dialogue.net") 
     { 
       var blah = e.data; 
       alert(blah);  
     } 
     else{alert("error");} 
} 
addEventListener("message",handlingMsg, true); 

e questa è la funzione del mittente che viene attivato da un semplice modulo (in figlio) -

var text=$('.srchInput').val(); 
    window.parent.postMessage(text, "http://uc.dialogue.net"); 

dovrei essere indirizzare il genitore in un modo diverso?

Acclamazioni Paul

risposta

91
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; 
var eventer = window[eventMethod]; 
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; 

// Listen to message from child window 
eventer(messageEvent,function(e) { 
    var key = e.message ? "message" : "data"; 
    var data = e[key]; 
    //run function// 
},false); 

preso a lavorare con il sopra nella pagina padre e la successiva nella pagina figlio -

parent.postMessage("loadMyOrders","*"); // `*` on any domain   

codice copiato da here.

+3

Impressionante! Si noti che nel listener di eventer, 'e.message ==" loadMyOrders "' – bergie3000

+3

Grazie per quello. Anche se in Chrome ho 'e.data ==" loadMyOrders "'. –

+8

A volte è necessario utilizzare window.opener.postMessage(); Ad esempio, se la finestra secondaria aveva alcuni reindirizzamenti. – Aldekein

13

Una versione moderna, semplificata della risposta accettata (che cade il supporto legacy IE8, e rende il codice molto più leggibile):

window.addEventListener('message',function(e) { 
    var key = e.message ? 'message' : 'data'; 
    var data = e[key]; 
    //run function// 
},false); 

Si prega di consultare: