【发布时间】:2016-10-02 22:02:55
【问题描述】:
我正在尝试使用 window.postMessage API 将来自子文档(iframe)的简单消息发送回其直接父级。
在父文档中,我有以下内容:
window.addEventListener("message", receiveMessage, true);
var receiveMessage = function(event) {
console.log("Recieved event " + JSON.stringify(event));
}
然后,在 iframe 中我有以下内容:
window.parent.postMessage('message', '*');
根据我读过的所有内容,这应该可以工作,并且我的日志消息应该写入控制台。除非它不起作用。
我知道使用 * 作为 targetOrigin 并不总是安全的,但此时我只想理清链接。
我遗漏了什么想法或任何明显的东西?
【问题讨论】:
-
在这种情况下“不工作”是什么意思?您收到任何错误消息吗?
-
iframe元素是否有message事件处理程序?postMessage()是在parent窗口调用的吗? -
如果你真的写了你的问题,
receiveMessage在你附加它作为你的事件处理程序时仍然是未定义的。事先声明它或使用function receiveMessage(){}表示法,以便在脚本顶部定义它。 -
@Kaiido 我编辑了我的脚本并在上游定义了 receiveMessage 函数。消息仍然没有从我的 iframe 路由。有趣的是,我还在同一 iframe 内的页面上运行了一个 FB 连接库,它正在向父级发送消息。
-
@guest271314 我认为我不需要定义在 iframe 内处理的“消息”事件。据我了解,我只需要一个父窗口的句柄,我拥有全局 window.parent 变量,然后我只需要调用 postMessage()。不过我可能错了,因为我的代码不起作用。
标签: javascript iframe postmessage