2011-12-28 7 views
8

Estoy tratando de usar easyXDM para comunicarme entre el documento padre y el iframe hijo (cargado desde un dominio diferente - amazon). El iframe src es una URL firmada oauth y tiene el siguiente código para comunicarse con el documento de nivel superior que lo carga:Uso de easyXDM para comunicar entre documento padre e hijo iframe cargado desde un dominio diferente (amazon)

socket = new easyXDM.Socket({ 
    remote: "http://localhost:56789/hitch.html", /* parent document */ 
    remoteHelper: "http://localhost:56789/easyXDM/name.html", 
    onMessage: function(message, origin){ 
     alert("Received '" + message + "' from '" + origin + "'"); 
    }, 
    onReady: function() { 
     socket.postMessage("Yay, it works!"); 
    } 
}); 

el código anterior se mantiene en la parte de la cabeza del documento.

En matriz (hitch.html):

var transport = new easyXDM.Socket(/** The configuration */{ 
    local: "/easyXDM/name.html", 
    swf: "/easyXDM/easyxdm.swf", 
    onMessage: function(message, origin){ 
     transport.postMessage("This is a message received from " + location); 
    } 
}); 

Cuando cargo el iframe niño de amazonS3 dentro del documento principal, easyXDM está creando otro marco flotante dentro del marco flotante niño con src establecido en "http: // localhost: 56789/hitch.html? xdm_e = ... ". Esto hace que todo se repita en un ciclo: con el padre nuevamente intentando cargar el iframe hijo, y así sucesivamente.

Estoy probando en Firefox 9.0 que tiene soporte postMessage. Los mensajes reales se envían correctamente y puedo ver los cuadros de mensajes. Aparte de esto, también se genera un error de "url es indefinido o vacío" en el documento de nivel superior al inicializar easyXDM.socket pero no parecen afectar a cualquier otra cosa ...

Gracias,

+0

Tengo el mismo confusion.Have que resolvió este problema? – xiaohan2012

+1

nope :(. Encontré otro envoltorio sencillo para la postmensajería que usa el hash de ubicación para navegadores antiguos y el mensaje posterior para los navegadores más nuevos. Como una ventaja adicional, el código es pequeño y fácil de entender a diferencia del laberinto de easyXDM. /www.onlineaspect.com/2010/01/15/backwards-compatible-postmessage/ – ivymike

Respuesta

8

Creo que se Acabo de recuperar la lógica. La documentación dice con toda claridad:

"Al utilizar easyXDM se carga primero el documento del consumidor y luego dejar easyXDM cargar el proveedor."

El "consumidor" es el documento principal, y easyxdm carga el "proveedor" que es el iframe hijo.

ref - https://github.com/oyvindkinsey/easyXDM

+1

Estuve atascado durante horas en esto y luego solo leí su respuesta y eliminé el 'iframe' de mi documento principal. Además, agregué' propiedad del contenedor del socket al 'id' de un' div' y funcionó. Gracias por explicar el significado real de esta línea. Creo que OP debe marcar esto como respuesta porque está al punto. :) –

Cuestiones relacionadas