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

Using easyXDM to communicate between parent document and child iframe loaded from a different domain (amazon)

本文关键字:加载 iframe 之间 通信 amazon 文档 easyXDM 使用      更新时间:2023-09-26

我试图使用easyXDM在父文档和子iframe(从不同的域加载- amazon)之间进行通信。iframe src是一个oauth签名的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!");
    }
});

以上代码保存在文档的头部部分。

In parent(希契。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);
    }
});

当我从amazonS3加载父文档中的子iframe时,easyXDM正在子iframe中创建另一个iframe, src设置为"http://localhost:56789/hitch.html?xdm_e=…". 这将导致整个过程在一个循环中重复——父进程再次尝试加载子进程iframe,等等。

我在Firefox 9.0上测试,它支持postMessage。实际的消息正在正确发送,我可以看到消息框。除此之外,在初始化easyXDM时,它还会在父文档中抛出"url未定义或为空"错误。但它似乎不影响其他任何东西…

谢谢,

我想你把逻辑搞反了。文档说得很清楚:

"当使用easyXDM时,您首先加载消费者文档,然后让easyXDM加载提供程序。"

"消费者"是父文档,而easyxdm加载的"提供者"是子iframe。

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