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标签,模拟点击,经测试,无效,请大牛指导

时间: 2024-08-28 23:52:27

window.open() 被拦截后的分析的相关文章

一枚Android拦截马简要分析

一枚Android拦截马简要分析 [文章标题]:一枚Android拦截马简要分析 [文章作者]: Ericky [作者博客]: http://blog.csdn.net/hk9259 [下载地址]: 由于恶意程序,不提供下载 [保护方式]: 阿里加固 [作者声明]: 本人水平有限,若有不足错误之处请指正 0x1 脱壳 脱壳后包名结构如下: 0x2 获取内容 主要获取短信,联系人以及通话记录. 0x3 混淆加密手法 利用大量的莫须有的Toast,诱使用户安装激活此木马: 利用staker为字符串加

电话拦截以及电话拦截后的提示音

1. 电话拦截 这个功能大家可能都知道了,就是利用反射原理调用ITelephony的隐藏方法来实现.这个就不说了,在附件的代码里有. 2.拦截后提示忙音/空号/已关机/已停机这个功能其实是要用到MMI指令,具体如何设置呼叫转移的指定可以参考这里 http://baike.baidu.com/view/206402.html?fromTaglist .在 本文中我们会用到“遇忙转移”转移的功能.中国移动的设置方式是 **67#电话号码#,取消方式为 ##67#.”无条件转移“用21代替67即可.这

信号完整性之差分对设计6(后布线分析)

对已经完成布线的差分对进行后布线分析. (1)执行菜单命令Analyze-Preferences,选择Interconnect Models,设置互连参数如图: (2)单击OK,关闭对话框. (3)打开Allegro Constraint Manager,执行Tools-Options,弹出Options窗口,按图进行设置: (4)在Allegro Constraint Manager执行Objects-Filter,弹出Filter窗口,设置如图: (5)单击OK,关闭Filter窗口. (6

ajax请求成功后新窗口window.open()被拦截的解决方法

ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截. 解决方法: 1.异步改为同步,即:async:false 2.将新开窗口指向为一个对象,然后修改对象的 ur

Struts2之拦截器原理分析及使用-下

一.学习案例:关于拦截器的学习,在此就结束了,之所以分了四章讲解,一方面是让大家对拦截器的原理以及实现方式进行系统的掌握,另一方面就是让大家学会看源码以及体验看源码所带来的好处.最后,也就是这一章,我会用一个小案例进行总结. 案例:登录验证功能的实现. 二.案例分析:项目配置好后,我们先在浏览器中访问login1,我们别输入admin,换其他词,则会跳回当前的登录页面.此时,我们在浏览器中访问login2,会跳转到error.jsp页面,证明拦截器拦截成功.我们再访问login1,正确输入adm

Struts2之拦截器原理分析及使用-中

一.学习案例:关于拦截器的了解,我们肯定不在单纯地编码.我会带大家通过研读源码了解拦截器的实现方式,以及学习struts2的编码方式. 二.案例分析: a)适配器的实现首先会实现Interceptor接口,而在实现类中,我们会实现三个方法:init(),destroy(),intercept().而前两个对于我们来讲并不需要.当然struts2也采用了适配器模式,从而让实现类代码更加清晰,容易辨别.在此,我们会通过继承AbstractInterceptor抽象类替换Interceptor接口,由

Struts2之拦截器原理分析及使用-上

一.学习案例:通过在loginUI.jsp页面填写表单提交成功跳转到结果页面,查看控制台输出,初步了解拦截器工作流程. 二.案例分析: a)创建拦截器(MyInterceptor.java)实现Interceptor接口. 创建成功后,会实现三个方法:init(),destroy(),intercept(). 我们主要是使用intercept()方法,在此实现功能. init()会在服务器启动struts.xml加载时进行自动调用. destroy()会在服务器重启时调用. b)在struts.

window.open()被拦截问题

最近做项目的时候遇到一个需求,在商品详情页面中点击购买按钮,之后再新标签页中打开生成的订单页面,所以想用window.open()来实现.但是测试的时候发现打开的链接被浏览器拦截. 之后,开始在网上查找解决方案,看到最常用的一个是新建一个a标签,模拟点击测试,多次测试后发现并没有用.然后又尝试了几个其他常见的方法,还是都会被拦截. 然后,发现window.open()拦截是有条件的.一般通过用户的点击事件触发的在新标签页中打开链接,浏览器是不会拦截的,因为这种形式打开新窗口浏览器会认为是用户自己

ajax请求window.open()被拦截

项目使用ajax post后根据返回的success,需要打开一个新页面,使用window.open发现谷歌浏览器直接被拦截. 后来了解发现该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了,即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')), 浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以也会被拦截.废话不多说,直接上终极解决办法 解决方法: var newwin = window.open(); // 这句