我有一个包含iFrame的基本HTML页面。当父加载其中的iFrame时,iFrame会执行以下javascript:
myParent = window.top;
if (window.parent != window.top) {
myParent = window.parent;
}
dataString = '{"function":"$.SmartMenus.hideAll();"}';
myParent.postMessage(dataString, window.origin);
如果单击iFrame中的链接并在包含完全相同的javascript代码的同一iFrame中加载新文档,则不会执行相同的代码。显然,window.top或window.parent不再在正确的范围内。
我试过window.opener,但这也不起作用。我目前正在Windows 7上使用FireFox 29.0.1进行测试。
非常感谢任何帮助!
更新 我应该提到这是一个跨域请求。但是,在iFrame中加载的页面与加载到iFrame中的初始页面具有相同的域。
在Chrome中测试时,我确实看到我收到以下错误: 无法在'DOMWindow'上执行'postMessage':提供的目标源('http:/ secondDomain:51990')与收件人窗口的原点不匹配。
为什么不能在iFrame中发布来自同一域的邮件?我的理解是,父母可以从任何域监听postMessages,开发人员可以根据发出请求的域的来源选择对消息采取行动。
答案 0 :(得分:2)
行。该问题与窗口对象的范围无关。问题是原点传递给父母不再匹配父母的域。这是我构建原始域的方式中的错误。我选择了' *'当收到消息时,外卡和父母在域边过滤请求。