【问题标题】:Javascript Cross Domain PostMessage not workingJavascript跨域PostMessage不起作用
【发布时间】:2016-08-26 03:36:06
【问题描述】:

我有一个打开子窗口(具有 iframe)的页面,并且从新页面我调用父函数将一些值从子窗口传递到父窗口。 子窗口代码:

 window.opener.ParentFunction(sendvalues);

由于两者都在同一个域(example.com)中,所以对我来说工作正常。 现在由于一些变化,我需要将我的子窗口移动到一个新域(new.example.com)。我也没有收到 Premission denied 错误。

为了解决这个问题,我正在使用 PostMessage。

子窗口代码:

window.parent.postMessage(sendvalues,"*");

父代码:

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";

var eventer = window[eventMethod];    

var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";


eventer(messageEvent, function (e) {
//for debug    
alert(e.data);

ParentFunction(e.data);

}, false);

这对我不起作用,我没有任何价值。没有错误,什么都没有发生。 代码没有在 eventer 方法中执行。我没有收到任何警报。

非常感谢任何帮助。

【问题讨论】:

  • 我刚刚看到你对postMessage 的使用——你能详细说明一下吗...
  • @Jaromanda X..你在寻找什么细节......似乎事件函数的代码根本没有被调用......我没有收到我添加的任何警报。
  • @Jaromanda X :我也需要从父窗口将 PostMessage 发送到弹出窗口吗?在我的情况下,这不是必需的,因为我使用查询字符串传递所有值,但是我想从 Child使用 Postmessage 的值。可以使用“event.source.postMessage”来完成
  • parent.postMessage(obj, window.location.origin); 设置域,看看有没有区别。
  • 另外,我没看错......有父母,孩子和孩子也有一个iframe? - 并且 iframe 是发往父级的 postMessage 的来源?

标签: javascript cross-domain postmessage


【解决方案1】:

根据新信息,您应该致电:

如果孩子和 iframe 在同一个域中

window.parent.opener.postMessage

如果父子节点在同一个域中而 iframe 不在,则 iframe 可能需要调用

window.parent.postMessage

然后,子窗口应该监听消息并将消息传递给父窗口

window.opener.postMessage

不过,在这种情况下,您仍然可以尝试 window.parent.opener.postMessage - 我不打算为您测试所有内容;)

【讨论】:

  • 这在 Firefox(和其他浏览器)中应该可以正常工作。
  • @Jaromanda X :我尝试了你的建议,发布来自父母和孩子的消息,但它对我不起作用。
  • 在子窗口中,我需要通过单击按钮向父级发送数据。
  • 查看已编辑的答案 - window.parent.postMessage 应该可以正常工作 - 一旦我知道你已经看到了这个愚蠢的答案,我将删除它
  • @JaromandaX...非常感谢您帮助我。正如我所建议的那样,我尝试了 window.parent.opener.postMessage,现在我收到错误不支持此类接口。
猜你喜欢
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 2014-07-01
  • 2011-12-24
  • 1970-01-01
相关资源
最近更新 更多