admin 管理员组文章数量: 1103785
最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,在本机实验没问题,到了服务器就被拦截了,火狐有拦截提示,360浏览器拦截提示都没有,虽然在自己的环境可以对页面进行放行,
但是对用户来说,不能要求用户都来通过拦截。何况当出现拦截时,很多小白根本不知道发生了啥,不知道在哪里看被拦截的页面,百思不得其解,后来查了一下,各家浏览器支持的不一样。
另外,可以发现,当window.open为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到ajax或者一段异步代码内部,马上就出现被拦截的表现了。
原因分析: 当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这可能是一个广告,不是一个用户希望看到的页面。
解决方案:
1.使用a标签替代
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();
}
下面还有两种方案,详见参考链接
补充:
JS打开新窗口的2种方式
1.超链接<a href="http://www.jb51" title="脚本之家">Welcome</a>
等效于js代码
window.location.href="http://www.jb51"; //在同当前窗口中打开窗口
2.超链接<a href="http://www.jb51" title="脚本之家" target="_blank">Welcome</a>
等效于js代码
window.open("http://www.jb51"); //在另外新建窗口中打开窗口
3、关闭新窗口:
window.opener =null;
window.close();
window.open('','_self')
原文链接:https://blog.csdn/u011159417/article/details/53692536
版权声明:本文标题:window.open浏览器弹出新窗口被拦截—原因分析和解决方案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.520sys.cn/xp/1755024518a1458016.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论