postMessage()
を使用して、親ウィンドウから生成された新しいウィンドウにデータを送信しようとしています。 postMessage()
はchrome/firefoxでは正常に動作しますが、Internet ExplorerではaddEventListener
に窒息しているようで、新しいページにデータが送信されていません。window.postMessage Internet Explorer 11サポート
私が実装している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,'*');
});
}
子供:IEで
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
});
}
デバッグ:
Parent Window: attach1 child Window: add
デバッグChromeで:
Parent Window: add1 add2 child Window: add
だから、IEで、子ウィンドウの親参照がaddEventListener
を持っていませんが、IE11では必要ないです私の知る限り、子ウィンドウがaddEventListener
子ウィンドウを起動すると、attachEventだけを使用できます。 addEventListenerは、子ページにもかかわらず動作します。私はエミュレータを使用していません – Programatic
コンソール経由でいくつかのテストを行いました。 IE11.0.9600.17501 - エッジモード:window.addEventlistenerは関数であり、window.attachEventは未定義です。 IE8エミュレーションでは、逆の方法です。 newTabでは、ターゲットウィンドウに設定されたmodusに依存しますが、これは意味があります。エッジモード:addEventListenerは関数であり、attachEventは未定義です。 IE8エミュレーション:addEventListenerは未定義です。attachEventはオブジェクトです。 – yezzz
もう1つの質問:ページに、IEにレガシーモードを使用させるメタタグはありますか? Internet Explorerの[ファイル] - [プロパティ]メニューでは、テストサイトがどのIEセキュリティゾーンにマップされているかを確認できます:https://msdn.microsoft.com/nl-nl/library/jj676915(v=vs.85).aspx – yezzz