window.open() คืนค่า null ใน IE11 หากเปิดอยู่

ใน IE บน Windows 10 ที่มีการตั้งค่าเริ่มต้น หากฉันดำเนินการ window.open() กับไซต์อินเทอร์เน็ตภายนอกจากเพจบนเครื่องของฉันหรือเซิร์ฟเวอร์บนเครือข่ายท้องถิ่นของฉัน ฉันจะได้รับ null

ดูการทำซ้ำของฉันด้านล่าง สิ่งนี้จะไม่เกิดขึ้นใน IE บน Windows 7 หรือ Google Chrome

ที่น่าสนใจคือ ถ้าฉันเปิด "เปิดใช้งานโหมดที่ได้รับการป้องกัน" สำหรับโซนอินทราเน็ต (เพื่อให้โหมดที่ได้รับการป้องกันเหมือนกันในโซนอินทราเน็ตและโซนอินเทอร์เน็ต) ปัญหาก็จะหายไป อย่างไรก็ตาม ฉันต้องการให้สิ่งนี้ทำงานโดยไม่ต้องให้ผู้ใช้ทำเช่นนี้

ฉันไม่พบเอกสาร Microsoft ที่ชัดเจนที่อธิบายพฤติกรรมนี้ ฉันแจ้งปัญหาเกี่ยวกับเรื่องนี้เกี่ยวกับปัญหา EdgeHTML แต่ต้องการดูว่าชุมชนใน SO มีความเข้าใจว่าทำไมสิ่งนี้ถึงเกิดขึ้นหรือไม่

ขอบคุณ!

<!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 แหล่งที่มา


คำตอบ (1)


ดูเหมือนว่าโหมดที่ได้รับการป้องกันจะไม่อนุญาตให้เปิดหน้าต่างใหม่นอกโดเมนปัจจุบัน ดังนั้นคุณจึงสามารถลองเปิดหน้าต่างด้วยหน้าว่างและหลังจากอัปเดตตำแหน่งแล้ว

<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
ฉันลองสิ่งนี้ อย่างไรก็ตาม หลังจากที่หน้าต่างเปลี่ยนเส้นทางไปยัง URL ใหม่ คุณสมบัติ closed ของมันคือ true และการเรียกใช้ close() บน URL จะไม่ปิด - person AndrewL; 02.08.2017
comment
@AndyGeek ฉันมีสถานการณ์เดียวกัน ... คุณพบวิธีแก้ปัญหาหรือไม่? - person Daniel Delgado; 17.04.2019
comment
@DanielEduardoDelgadoDiaz คุณพบวิธีแก้ปัญหาหรือไม่? - person Yifan; 26.03.2021