window.postMessage Internet Explorer 11支持
问题描述:
我正在尝试使用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
答
AFAIK它不需要在IE11:http://caniuse.com/#search=addEventListener
在IE11只是测试这一点,可以确认它使用addEventlistener。
您是否在父页面中模拟IE8?这将使用附加。
新窗口将恢复为默认(边缘),这将使用添加。
产卵子窗口只允许我使用attachEvent。虽然addEventListener在im页面上工作。我没有使用模拟器 – Programatic
通过控制台进行了一些测试。 IE11.0.9600.17501 - Edge modus:window.addEventlistener是一个函数,而window.attachEvent是未定义的。在IE8仿真中,这是另一种方式。对于newTab - 它取决于在目标窗口中设置的模式,这是有道理的。边缘模式:addEventListener是一个函数,attachEvent未定义。 IE8仿真:addEventListener未定义,attachEvent是一个对象。 – yezzz
还有一个问题:页面中是否有强制IE使用传统模式的元标记?请参阅:https://msdn.microsoft.com/nl-nl/library/jj676915(v=vs.85).aspx – yezzz