2017-01-20 53 views
0

因此,在我的域名的子域名中,我有一个html文件,例如file.html,它本身也包含<script src="https://example.com/script.js">JS postMessage不起作用

然后,这个script.js与这个网站连接了一些听众,也将消息发送给家长,这一下如下的功能:

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,这srcfile.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,域或其他错误显示,只是在控制台沉默。

我在哪里错了?

+0

从MDN window.frames - 返回窗口本身,这是一个类似数组的对象,列出当前窗口的直接子帧。那么,这个构建window.frames.target是什么? –

+0

我刚刚从某个地方拿过这个函数,所以...试图改成window.parent.postMessage,还是什么都没有, – Coffee

回答

1

也许你忘了你的名字iframe的“目标”:

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

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