jQuery不支持postmessage事件?

65

当我使用jQuery的事件监听器来处理消息事件时,如下所示:

$(window).on('message', function(e) {
    var data = e.data; // data = undefined
});

数据未定义!我确定已经将数据传递给了当前窗口。因为如果我使用"addEventListener",一切都很顺利!

那么问题出在哪里?

2个回答

116

可能是 jQuery 对事件的 data 属性进行了预处理,而该操作可能尚不支持 message 事件。

尝试使用 originalEvent 属性来获取您的数据:

$(window).on("message", function(e) {
    var data = e.originalEvent.data;  // Should work.
});

3
给你点个赞,这帮助我停止了拔头发的行为。 - ceejayoz
1
什么是在IE中处理“onmessage”的最佳方法? - grim
1
@grim,IE在支持postMessage()方面存在问题。请参见https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage#Browser_compatibility和[Is cross-origin postMessage broken in IE10?](https://dev59.com/kmQo5IYBdhLWcg3wOdJa)。 - Frédéric Hamidi
+1 - 这是我正在寻找的解决方案。但是,我无法使用 $(window).off("message") 解除事件绑定。另一方面,$(window).bind / $(window).unbind 成功地为我附加/分离了一个处理程序到 message 事件。 - Vitali Climenco

15

一些浏览器使用“onmessage”事件。我建议对先前的答案进行一点改进,以增加兼容性:

$(window).on("message onmessage", function(e) {
    var data = e.originalEvent.data;
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接