在ajax请求过程中,想在请求成功后打开一个新的页面,于是就想到了通过js window.open()来实现,但是最终都被拦截了。
有关window.open()的基本使用可以参考mozilla提供的API文档:window.open。
原因分析
查询一番资料才明白,大部分现代浏览器(泛指Chrome/Firefox/IE10+/Safari),都开启了默认阻止弹出窗口的策略。这是因为是windoew.open被广告商滥用,严重影响用户的使用。浏览器会根据用会的行为来判断这次的window.open是否属于流氓操作。
正常情况下,用户点击事件内,触发打开一个新窗口
obj.onclick = function () {
window.open( url );
}
通过用户事件触发的新窗口打开,这种形式打开新窗口浏览器会认为是用户自己需要的,大多浏览器是不会拦截的。
我们希望在ajax请求成功后,触发打开新窗口,但这样是会被浏览器拦截的,那么我们该如何解决呢?
解决方案:
借助一个中间页面
我们在用户点击后就打开一个空白窗口,然后再ajax返回成功后给空白窗口一个url,这样就不会被拦截了。
$obj.click(function(){
var newTab=window.open('about:blank');
$.ajax({
sucssess:function(data){
if(data){
//window.open('http://www.baidu.com');
newTab.location.href="http://www.baidu.com";
}
}
})
})
注:使用setTimeout延迟打开新页面,也会被拦截哦!
这是我的第一篇文章,有写的不好的地方希望大佬指出,希望我的文章能帮到你,欢迎留言评论!!