7

我有一个 iframe,想将数据从 iframe 发送到父窗口。

在 iframe 的 js 代码中,我有以下语句

window.parent.postMessage('hello', '*');

父窗口中对应的消息处理程序如下

$(window).bind('message', function (event) {
    console.log(event.data);
    console.log(event.origin);
    console.log(event.source);
    console.log('received');
});

我正在从 localhost 加载代码,并且 iframe 源也从 localhost 加载。我在 Firefox 21 中运行代码。

问题是event.data总是nullevent.orign and event.sourceundefined。我该如何解决这个问题?

4

2 回答 2

11

请参阅Frédéric Hamidi对此的回答。发生的事情是 jQuery 将原始事件封装在正确的 jQuery.event 对象类型中。因此,要获得原始事件,您只需:

$(window).on("message", function(e) {
  console.log("Orignal:", e.originalEvent);
});
于 2014-09-05T14:07:45.197 回答
9
window.parent.postMessage('hello', '*');   
window.addEventListener("message", receiveMessage, false);
       function receiveMessage (event) {
            console.log(event.data);
            console.log(event.origin);
            console.log(event.source);
            console.log('received');
        }

这将按预期工作;jQuery 的事件绑定(“消息”)可能存在问题 当得到一些东西时会更新。

于 2013-06-19T12:08:49.630 回答