因此,在我的域的子域中,我有一个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,域或其他错误,只是在控制台中保持沉默。
我哪里错了?
答案 0 :(得分:1)
可能您忘了为iframe命名“目标”:
<iframe src="http://target.com" name="target">
<script>
var win = window.frames.target;
win.postMessage("message", *);
</script>