如果打开,window.open()在IE11中返回null

时间:2017-08-01 22:46:02

标签: javascript internet-explorer windows-10 internet-explorer-11

在Windows 10上使用默认设置的IE中,如果我从本地计算机上的页面或本地网络上的服务器对外部Internet站点执行window.open(),则会得到null。< / p>

请参阅下面的我的复制品。在Windows 7或Google Chrome上的IE中不会发生这种情况。

有趣的是,如果我打开Intranet区域的“启用保护模式”(以便Intranet区域和Internet区域中的保护模式相同),则问题就会消失。但是,我需要这个工作而不要求用户这样做。

我没有找到任何明确的Microsoft文档来解释这种行为。我在EdgeHTML问题网站上对此提出了https://www.crummy.com/software/BeautifulSoup/bs4/doc/,但想知道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>

1 个答案:

答案 0 :(得分:2)

似乎保护模式不允许在当前域之外打开新窗口,因此您可以尝试使用空白页打开窗口并更新位置。

<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>