JS postMessage不起作用

时间:2017-01-20 12:13:31

标签: javascript html iframe cross-domain

因此,在我的域的子域中,我有一个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, '*');
};

然后,在另一个域上,我有一个iframesrcfile.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,域或其他错误,只是在控制台中保持沉默。

我哪里错了?

1 个答案:

答案 0 :(得分:1)

可能您忘了为iframe命名“目标”:

<iframe src="http://target.com" name="target">

<script>
  var win = window.frames.target;
  win.postMessage("message", *);
</script>