window.open() mengembalikan null di IE11 jika dibuka

Di IE pada Windows 10 dengan pengaturan default, jika saya melakukan window.open() terhadap situs internet eksternal dari halaman di mesin lokal saya atau server di jaringan lokal saya, saya mendapatkan null.

Lihat repro saya di bawah. Ini tidak terjadi di IE pada Windows 7 atau Google Chrome.

Menariknya, jika saya mengaktifkan "Enable Protected Mode" untuk Intranet Zone (agar Protected Mode sama di Intranet Zone dan Internet Zone), maka masalahnya akan hilang. Namun, saya ingin ini berfungsi tanpa mengharuskan pengguna melakukan ini.

Saya belum menemukan dokumentasi Microsoft yang jelas yang menjelaskan perilaku ini. Saya mengangkat masalah tentang masalah EdgeHTML ini situs, tetapi ingin melihat apakah komunitas di SO mempunyai pemahaman mengapa hal ini terjadi.

Terima kasih!

<!DOCTYPE HTML>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <script>
        var popupWindow = null;

        function openWindow() {
            popupWindow = window.open('http://microsoft.com', '_blank', 'left=100;top=100;height=100;width=100');
        }

        function checkWindowStatus() {
            if (popupWindow) {
                document.getElementById('status').innerHTML += '- Truthy reference. Closed? ' + popupWindow.closed + '</br>';
            } else {
                document.getElementById('status').innerHTML += '- Falsy reference: ' + popupWindow + '</br>';
            }
        }
    </script>
</head>

<body>
    <h2>Popup Issue</h2>
    <button onclick="openWindow()">Open Window</button>
    <button onclick="checkWindowStatus()">Check Window Status</button>
    <button onclick="popupWindow.close()">Close Window</button>
    <p id="status"></p>
</body>

</html>

person AndrewL    schedule 01.08.2017    source sumber


Jawaban (1)


Tampaknya mode terproteksi tidak mengizinkan untuk membuka jendela baru di luar domain saat ini, jadi Anda dapat mencoba membuka jendela dengan halaman kosong dan kemudian memperbarui lokasi.

<script>
    var popupWindow = null;

    function openWindow() {
        popupWindow = window.open('', '_blank', 'left=100;top=100;height=100;width=100');
        popupWindow.location = 'http://microsoft.com';
    }

    function checkWindowStatus() {
        if (popupWindow) {
            document.getElementById('status').innerHTML += '- Truthy reference. Closed? ' + popupWindow.closed + '</br>';
        } else {
            document.getElementById('status').innerHTML += '- Falsy reference: ' + popupWindow + '</br>';
        }
    }
</script>
person Triby    schedule 01.08.2017
comment
Saya mencoba ini. Namun, setelah jendela dialihkan ke URL baru, properti closed-nya adalah true dan penerapan close() di dalamnya tidak akan menutupnya. - person AndrewL; 02.08.2017
comment
@AndyGeek, saya mengalami situasi yang sama... Apakah Anda menemukan solusinya? - person Daniel Delgado; 17.04.2019
comment
@DanielEduardoDelgadoDiaz Apakah Anda menemukan solusinya? - person Yifan; 26.03.2021