window.open () возвращает null в IE11 при открытии

В IE в Windows 10 с настройками по умолчанию, если я выполняю window.open() для внешнего интернет-сайта со страницы на моем локальном компьютере или на сервере в моей локальной сети, я получаю null.

Смотрите мою репродукцию ниже. Этого не происходит в IE в Windows 7 или Google Chrome.

Интересно, что если я включу «Включить защищенный режим» для зоны интрасети (чтобы защищенный режим был одинаковым для зоны интрасети и зоны Интернета), проблема исчезла. Однако мне нужно, чтобы это работало, не требуя от пользователей этого.

Я не нашел какой-либо четкой документации Microsoft, объясняющей такое поведение. Я поднял вопрос по этому поводу, связанный с проблемами EdgeHTML. site, но хотел узнать, есть ли у сообщества 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() в нем не закрывает его. - person AndrewL; 02.08.2017
comment
@AndyGeek, у меня такая же ситуация ... Вы нашли обходной путь? - person Daniel Delgado; 17.04.2019
comment
@DanielEduardoDelgadoDiaz Вы нашли обходной путь? - person Yifan; 26.03.2021