2012-01-11 17 views
50

He estado siguiendo este tutorial - http://www.youtube.com/watch?v=R2hOvZ7bwXU, que básicamente se explica cómo utilizar PostMessage para pasar con seguridad un mensaje entre iframe y el padre - que, básicamente, termina con algo como esto - http://html5demos.com/postmessage2Html5 - Mensaje cruzado del iframe del navegador cruzado - ¿hijo a padre?

Mi problema es que lo necesito para trabajar al revés (hijo a padre) y no saber cómo orientar la ventana padre.

este es mi código receptor (en la matriz) -

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

y esta es la función de emisor que se desencadena por una forma sencilla (en los niños) -

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

¿Debo estar apuntando a los padres de una manera diferente?

Saludos Paul

Respuesta

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

tengo que trabajar con lo anterior, en la página principal y el siguiente en la página secundaria -

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

Código copiado de here.

+3

impresionante! Tenga en cuenta que en el oyente de último momento, 'e.message ==" loadMyOrders "' – bergie3000

+3

Gracias por eso. Aunque en Chrome tengo 'e.data ==" loadMyOrders "'. –

+8

A veces necesita usar window.opener.postMessage(); Por ejemplo, si la ventana hija tenía algunas redirecciones. – Aldekein

Cuestiones relacionadas