首頁  >  問答  >  主體

javascript - window.open在什么情况下会遭到浏览器的屏蔽

因为要做站外OAuth登录,所以准备用window.open来打开登录页面,但是我担心会遭到浏览器的屏蔽,于是做了个测试代码。

<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<a href="#" id="a">进入其它网页</a>
<script>
document.getElementById('a').onclick = function () {
    window.open('http://segmentfault.com');
    return false;
};
</script>
</body>
</html>

我在一个网页中用window.open打开了另一个域名下的网页,没有遭到任何屏蔽。在Firefox,Chrome,Safari,Opera下面测试了,都没遭到屏蔽,甚至我还打开了Firefox的阻止弹出窗口,都没有被屏蔽。那么这些浏览器的屏蔽是怎么工作的呢?那些弹出窗口会被判定为恶意,并被屏蔽呢?

天蓬老师天蓬老师2751 天前1252

全部回覆(20)我來回復

  • 黄舟

    黄舟2017-04-10 12:44:29

    如果是由用户触发的动作所引起的window.open就不会被浏览器所阻止,比如写在onclick这些事件handler里的,但如果是代码自己触发的就会被block,比如把你代码改一下

    <html>
    <head>
    <meta charset="UTF-8" />
    </head>
    <body>
    <a href="#" id="a">进入其它网页</a>
    <script>
    setTimeout(function () {
        window.open('http://segmentfault.com');
    }, 1000);
    </script>
    </body>
    </html>

    这个窗口就会被浏览器block掉,你可以参考下mozilla上的说明,http://support.mozilla.org/en-US/kb/p...

    回覆
    0
  • 高洛峰

    高洛峰2017-04-10 12:44:29

    在触发未经用户操作的情况下。如加载网页时自动弹出的窗口。

    而由用户操作(如点击按钮/链接)触发的则不会被阻止。

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-10 12:44:29

    如果是在一个异步请求后打开新的窗口,下面的代码在谷歌CHROME及MAC-SAFARI浏览器下作了区分。

    var windowRef = window.open('', '_blank');
    ajaxGet("request.php").then(function(response){
        // do some logic
        url = "somewhere.com";
        // open url
        if (isChrome) {
            window.open(url, '_blank');
        } else if (isSafari) {
            setTimeout(function(){
                windowRef.location = url;
            },10);
        }
    })

    回覆
    0
  • 取消回覆