Maison > Questions et réponses > le corps du texte
因为要做站外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的阻止弹出窗口,都没有被屏蔽。那么这些浏览器的屏蔽是怎么工作的呢?那些弹出窗口会被判定为恶意,并被屏蔽呢?
黄舟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...
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);
}
})