首页 > 代码库 > 解决弹出的窗口window.open会被浏览器阻止的问题
解决弹出的窗口window.open会被浏览器阻止的问题
问题现象
最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,有时候会一直连接,有时候会偶尔拦截,
尝试了很多方法,走了很多弯路,总结一下结果分享大家
原因分析&深入研究
1 当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这不是用户希望看到的页面
2 在chrome的安全机制里面,非用户触发的window.open方法,是会被拦截的。
var btn = $(‘#btn‘);btn.click(function () { //不会被拦截 window.open(‘http://cssha.com‘)});
如上 window.open是用户触发的时候,是不会被拦截的,可以正常打开新窗口
var btn = $(‘#btn‘);btn.click(function () { $.ajax({ url: ‘ooxx‘, success: function (url) { //会被拦截 window.open(url); } })});
如上 用户没有直接出发window.open,而是发出一个ajax请求,window.open方法被放在了ajax的回调函数里,这样的情况是会被拦截的
解决方案
先弹出一个页面,再进行ajax请求,这样就不会被拦截, 实例代码如下
var btn = $(‘#btn‘);btn.click(function () { //打开一个不被拦截的新窗口 var newWindow = window.open(); $.ajax({ url: ‘ooxx‘, success: function (url) { //修改新窗口的url newWindow.location.href =http://www.mamicode.com/ url; } })});
继续进行优化
var btn = $(‘#btn‘);btn.click(function () { //打开一个不被拦截的新窗口 var adPopup = window.open(‘about:blank‘, ‘_blank‘,‘width=‘+window.screen.width+‘,height=‘+window.screen.height+‘, ...‘); $.ajax({ url: ‘ooxx‘,
type:‘post‘,
dataType:‘json‘, success: function (url) { //修改新窗口的url
adPopup.blur();
adPopup.opener.focus();
adPopup.location = url;
}
})});
附带其他弹框方式
//a标签动态click
function newWin(url, id) { var a = document.createElement(‘a‘); a.setAttribute(‘href‘, url); a.setAttribute(‘target‘, ‘_blank‘); a.setAttribute(‘id‘, id); // 防止反复添加 if(!document.getElementById(id)) document.body.appendChild(a); a.click(); }
//定时弹框 setTimeout(‘window.open(url);‘, 1);
参考文章
http://www.520ued.com/article/5417ef368d31c11e3b0003ff
http://zakwu.me/2015/03/03/dan-chu-chuang-kou-bei-liu-lan-qi-lan-jie-de-jie-jue-fang-an/
http://blog.csdn.net/starnight_cbj/article/details/5190283
解决弹出的窗口window.open会被浏览器阻止的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。