window.addEventListener(pesan tidak berfungsi dengan IE11

Saya membuka popup dan yang ini mengirimkan postMessage ke yang pembuka. Saya telah menambahkan ListenerEvent ke jendela utama untuk 'pesan' tetapi pendengar ini tidak pernah dipanggil di IE 11, ini berfungsi dengan firefox.

Saya sudah mencoba menunggu jendela, atau trik mengganti eventListener dengan setInterval tetapi saya tidak dapat mengakses data acara dalam kasus ini. Dan saya telah memeriksa semua utas yang mirip dengan pertanyaan saya. Jadi saya hanya mencoba contoh kecil dan sederhana untuk memeriksa apakah 'pesan' addEventListener berfungsi dengan IE11 dan ternyata tidak.

Script di halaman html utama saya:

var popup = window.open("popup.html", "Connection", 
                'toolbar=no, location=no, directories=no, menubar=no, status=yes, scrollbars=no, resizable=yes, copyhistory=no, '
                + 'width=' + w + ', height=' + h + ', top=' + y + ', left=' + x);
popup.postMessage("The user is 'bob' and the password is 'secret'",
                  "*");
                  },500);

Skrip di halaman html popup saya:

function receiveMessage(event)
{
    alert("OK popup");
    console.log("djedjeidjeidjiejdie");
}
window.addEventListener("message", receiveMessage, false);

Jadi bagi saya, hasilnya adalah jendela peringatan yang muncul saat membuka popup. Hal ini terjadi pada firefox tetapi tidak pada IE11. Tidak mengerti kenapa.


person JPG    schedule 26.03.2019    source sumber
comment
Bagaimana jika Anda menunggu popup Anda dimuat? popup.onload = function() { popup.postMessage(...   -  person Kaiido    schedule 26.03.2019


Jawaban (1)


Cobalah untuk melakukan tes dengan kode di bawah ini. Ini bekerja dengan IE 11.

Kode halaman utama:

<html>
<head>
    <title>Page Title</title>
    <script>
    //create popup window
var domain = 'http://example.com';
var myPopup = window.open(domain + '/HTML/popup_page.html','myWindow');

//periodical message sender
setInterval(function(){
    var message = 'Hello!  The time is: ' + (new Date().getTime());
    console.log('blog.local:  sending message:  ' + message);
    myPopup.postMessage(message,domain); //send the message and target URI
},6000);

//listen to holla back
window.addEventListener('message',function(event) {
    if(event.origin !== 'http://example.com') return;
    console.log('received response:  ',event.data);
},false);
    </script>
</head>
<body>

<h1>Main page</h1>

</body>
</html>

Kode halaman munculan:

<!Doctype html>
<html>
<head>
<script>
window.addEventListener('message',function(event) {
    if (event.origin !== 'http://example.com') return;
    alert("OK popup");
    console.log('message received:  ' + event.data,event);
    event.source.postMessage('holla back youngin!',event.origin);
},false);
</script>
</head>
<body>
<h1>popup_page</h1>
</body>
</html>

Keluaran di IE:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Perhatikan bahwa Anda juga akan mendapatkan alert() saat Anda menjalankan kode.

Referensi:

API window.postMessage HTML5

person Deepak-MSFT    schedule 27.03.2019
comment
Ini tidak berfungsi karena saya menggunakan jalur ke file statis di browser: C://..../main.html. Jika saya memanggil halaman melalui server 'main.html ini berfungsi di IE 11 - person JPG; 27.03.2019