使用easyXDM在父文档和从不同域加载的子iframe之间进行通信(亚马逊)

ivy*_*ike 8 javascript iframe html5 cross-domain

我正在尝试使用easyXDM在父文档和子iframe之间进行通信(从不同的域加载 - 亚马逊).iframe src是一个oeuth签名的URL,并具有以下代码与加载它的父文档进行通信:

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!");
    }
});
Run Code Online (Sandbox Code Playgroud)

上面的代码保存在文档的头部.

在父(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);
    }
});
Run Code Online (Sandbox Code Playgroud)

当我从父文档中的amazonS3加载子iframe时,easyXDM在子iframe中创建另一个iframe,其中src设置为"http:// localhost:56789/hitch.html?xdm_e = ...".这导致整个事情在一个循环中重复 - 父母再次尝试加载子iframe等等.

我正在测试具有postMessage支持的Firefox 9.0.实际的消息正在正确发送,我可以看到消息框.除此之外,在初始化easyXDM.socket时,它还会在父文档中抛出"url is undefined or empty"错误,但它似乎不会影响其他任何内容......

谢谢,

chr*_*arx 8

我认为你只是倒退了逻辑.文档说得非常清楚:

"当使用easyXDM时,首先加载使用者文档,然后让easyXDM加载提供者."

"consumer"是父文档,easyxdm加载"提供者",即子iframe.

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