首页 > 代码库 > window.open() 被拦截后的分析

window.open() 被拦截后的分析

前言:
此文章仅是个人工作中遇到问题后的一些记录和总结,可能毫无意义。。


事件回顾:

在开发中,PM要求在一个页面中输入多个链接然后可以一键在新窗口打开,所以就想到用window.open来实现,但是测试的时候发现会被拦截

 

分析:

关于window.open的用户很多前辈都有写过相关文章,就不在这里介绍了,查看window.open用法

针对不同的浏览器做了以下测试


1.用户点击事件内,触发打开一个新窗口

用户点击事件触发新窗口是例如:

obj.onclick=function(){

window.open(url);

}

通过用户事件触发的新窗口打开,这种形式打开新窗口浏览器会认为是用户自己需要的,大多浏览器是不会拦截的

目前测试的几个用户事件,只有click和dbclick是浏览器不会拦截的

窗口拦截不只是跟浏览器内核有关,所以对原生IE和几个常见IE内核的浏览器都有做测试

事件:click,dbclick

不拦截的浏览器有:Chrome,FF,IE 6.0-10.0,Safari,Opera,360浏览器

拦截:搜狗浏览器

事件:mouseover,mousemove,mouseout,scroll等等

不拦截:无

拦截:Chrome,FF,IE 6.0-10.0,Safari,Opera,360浏览器

2.用户点击事件内,触发打开多个新窗口

点击一次成功打开多个窗口的浏览器:FF,360浏览器,Safari

点击一次打开第一个窗口,后面的窗口拦截的浏览器:Chrome,IE 6.0-10.0,Opera

3.Javascript自动触发打开窗口

如:

setTimeout(function(){ window.open(‘http://www.baidu.com‘)},1000)

或者ajax请求成功后执行

$obj.click(function(){

$.ajax({

sucss:function(data){

if(data){

 window.open(‘http://www.baidu.com‘)

}

}

})

})

拦截的浏览器:测试的几个浏览器都拦截

解决方案:

1.对于ajax返回后在打开新窗口,可以在用户点击后就打开一个空白窗口,然后再返回成功后给空白窗口一个url,这样就不会被拦截了

$obj.click(function(){

var newTab=window.open(‘about:blank‘);

$.ajax({

sucss:function(data){

if(data){

 //window.open(‘http://www.baidu.com‘);

newTab.location.href="http://www.baidu.com";

}

}

})

})

2.脚本自行触发打开的新窗口

看网上很多说新建a标签,模拟点击,经测试,无效,请大牛指导

window.open() 被拦截后的分析