IE使用PostMessage传递一个空事件对象

时间:2014-03-12 17:38:28

标签: javascript html5 internet-explorer postmessage

IE的所有版本都这样做。所有其他浏览器都能正常工作..

我的代码:

window.addEventListener("message", receiveMessage, false);

传递给:

  function receiveMessage(event) {
     console.log ( JSON.stringify( event ) ) ;

在IE中,返回为:{}

postMessage

var message = { 'origin' : window.location.origin };
var url     = 'https://mywebsite.html';
frames[$(".fancybox-iframe").attr('name')].postMessage(message, url);

同样,这在任何其他浏览器中都可以正常工作。信息完美传递。据我所知,这个使用在IE中正常工作。

1 个答案:

答案 0 :(得分:2)

IE未实现window.location.origin。并且JSON.stringify()显然忽略了值为undefined的属性(MDN documentation表示它会这样做。)

在IE中运行此jsFiddle以查看:http://jsfiddle.net/jfriend00/MP68r/

您可以使用window.location的其他属性来解决此问题,具体取决于您对该信息的确切要求。


您可以将此作为替代方案:

location.href.match(/(^.*?\/\/.*?)[\/$]/)[1].toLowerCase();

这将返回路径中第一个斜杠之前的部分,这基本上就是原点。它被转换为小写,因为域名和协议不区分大小写,因此这可以进行规范比较。