window.postMessage Internet Explorer 11支持

时间:2017-04-14 14:57:12

标签: javascript internet-explorer postmessage

我正在尝试使用postMessage()将数据发送到从父窗口生成的新窗口。 postMessage()在chrome / firefox中工作得很好,但是使用Internet Explorer时,我的addEventListener似乎很窒息,并且没有数据被发送到新页面。

我理解,对于IE,您应该使用我已实现的attachEvent,但子页面支持addEventListener,只是父页面在引用子项时不会。

父:

var newTab = window.open('community_PrinterFriendlyEligibility');
if (newTab.addEventListener) {
     console.log('add1');
     newTab.addEventListener('load', function() {
         console.log('add2');
         newTab.postMessage(data,'*');
     });

 } else if (newTab.attachEvent) {
     console.log('attach1');
     newTab.attachEvent('load', function() {
         console.log('attach2');
         newTab.postMessage(data,'*');
     });
 }

子:

if (window.addEventListener) {
    console.log('add');
    window.addEventListener('message', function(event) {
         //process chrome
    }, false);
} else if (window.attachEvent) {
    console.log('attach');
    window.attachEvent('message', function(event) {
         //process IE
     });
 }  
  

在IE中调试:

Parent Window:
    attach1

child Window:
    add
     

在Chrome中调试:

Parent Window:
    add1
    add2

child Window:
    add

因此在IE中,子窗口的父引用没有addEventListener,但子窗口接受addEventListener

1 个答案:

答案 0 :(得分:0)

在IE11中不需要它:Source

刚刚在IE11中对此进行了测试,可以确认它使用了addEventlistener。

您是否在父页面中模拟IE8?这将使用附件。

新窗口将恢复为默认值(Edge),这将使用add。