【发布时间】:2017-01-20 20:34:50
【问题描述】:
所以在我的域的子域上,我有一个 html 文件,例如名为 file.html,它本身也包含 <script src="https://example.com/script.js">。
那么,这个script.js有一些与这个html连接的监听器,还有向父级发送消息的函数,如下所示:
v.sendMessageToParent = function (message) {
var jsonMessage = {
action: message
};
var win = window.frames.target;
win.postMessage(jsonMessage, '*');
};
v.sendActionMessageToParent = function (action) {
var jsonMessage = {
action: 'action',
type: action
};
var win = window.frames.target;
win.postMessage(jsonMessage, '*');
};
然后,在另一个域上,我有一个iframe,其中src 是file.html。
这个另一个域也有一些<script src="example.com/main.js">,我需要这个main.js 来收听从script.js 发送的消息。
在main.js我有这个代码:
if (window.addEventListener) {
window.addEventListener("message", messageHandler);
} else {
window.attachEvent("onmessage", messageHandler);
}
function messageHandler(event) {
console.log(event.data);
}
但我什么也得不到。没有显示 JS、域或其他错误,只是在控制台中保持沉默。
我哪里错了?
【问题讨论】:
-
来自 MDN window.frames - 返回窗口本身,它是一个类似数组的对象,列出了当前窗口的直接子帧。那么,这个构造window.frames.target是什么?
-
我只是从某个地方拿了这个功能,所以... 试图更改为window.parent.postMessage,仍然一无所获,
标签: javascript html iframe cross-domain