2017-04-14 167 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

相關問題