【问题标题】:JS postMessage does not workJS postMessage 不起作用
【发布时间】: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,其中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、域或其他错误,只是在控制台中保持沉默。

我哪里错了?

【问题讨论】:

  • 来自 MDN window.frames - 返回窗口本身,它是一个类似数组的对象,列出了当前窗口的直接子帧。那么,这个构造window.frames.target是什么?
  • 我只是从某个地方拿了这个功能,所以... 试图更改为window.parent.postMessage,仍然一无所获,

标签: javascript html iframe cross-domain


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多