2017-04-14 137 views
0

我正在尝试使用postMessage()将数据发送到从父窗口生成的新窗口。 postMessage()在Chrome/Firefox中工作正常,但与Internet Explorer似乎在我的addEventListener窒息和没有数据被发送到新的页面。window.postMessage Internet Explorer 11支持

据我所知,对于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 

调试在铬:

Parent Window: 
    add1 
    add2 

child Window: 
    add 

所以在IE中,父参考子窗口没有addEventListener但子窗口接受addEventListener

回答

0

AFAIK它不需要在IE11:http://caniuse.com/#search=addEventListener

在IE11只是测试这一点,可以确认它使用addEventlistener。

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

新窗口将恢复为默认(边缘),这将使用添加。

+0

产卵子窗口只允许我使用attachEvent。虽然addEventListener在im页面上工作。我没有使用模拟器 – Programatic

+0

通过控制台进行了一些测试。 IE11.0.9600.17501 - Edge modus:window.addEventlistener是一个函数,而window.attachEvent是未定义的。在IE8仿真中,这是另一种方式。对于newTab - 它取决于在目标窗口中设置的模式,这是有道理的。边缘模式:addEventListener是一个函数,attachEvent未定义。 IE8仿真:addEventListener未定义,attachEvent是一个对象。 – yezzz

+0

还有一个问题:页面中是否有强制IE使用传统模式的元标记?请参阅:https://msdn.microsoft.com/nl-nl/library/jj676915(v=vs.85).aspx – yezzz

相关问题