2012-01-11 3 views
50

Śledzę ten poradnik - http://www.youtube.com/watch?v=R2hOvZ7bwXU, które w zasadzie wyjaśnia jak używać PostMessage bezpiecznie przekazać wiadomość między iframe i rodzica - w zasadzie skończyć z czymś takim - http://html5demos.com/postmessage2Html5 - Porzucanie ramki iframe przeglądarki krzyżowej - dziecko do rodzica?

Moim problemem jest to, że muszę go pracować odwrotnie (z dzieckiem na rodzica) i nie wiem, jak kierować się do okna nadrzędnego.

to jest mój kod odbiornik (w dominującej) -

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); 

i jest to funkcja nadawca, który jest uruchamiany za pomocą prostego formularza (u dziecka) -

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

powinienem być celuje w rodzica w inny sposób?

Cheers Paul

Odpowiedz

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); 

Got go do pracy z powyższym na stronie macierzystej oraz następujące w stronę dziecka -

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

kod skopiowany z here.

+3

Awesome! Zauważ, że w detektorze zdarzeń końcowych 'e.message ==" loadMyOrders "' – bergie3000

+3

Dzięki za to. Chociaż w Chrome mam 'e.data ==" loadMyOrders "'. –

+8

Czasami trzeba użyć window.opener.postMessage(); Na przykład, jeśli okno podrzędne ma pewne przekierowania. – Aldekein