对window.open浏览器安全策略分析
核心提示:window.open广泛争议很多时候是由很多中小站长用来显示弹出式广告,但仍然有许多情况下,需要使用的业务需求。然而,大多数浏览器都有防止它一定的安全策略,本文…虽然window.open被弹出广告多次显示很多中小站长们广泛使用,它已被广泛讨论。然而,仍然有许多场景需要在业务需求中使用,然而,大多数浏览器都有一定的安全策略来防止它,因此本文将对以下浏览器进行测试。
chrome16,firefox10,360se4.2,IE6,IE8
1。首先,最原始的附加头标签。
Window.open(# 58blank '); / /空白页
Window.open(/); / /非同源的知名网站
Window.open( / / /同源);
Window.open(/); / /非同源非知名网站
警报(过度!);
结果表明,火狐,IE6,Chrome和360se所有阻止弹出广告;当360se加载,先打开开始阻止弹出阻止随后的代码的执行,即使在没有弹出。
2,在非标签上执行单击事件,然后触发该行为。
$(#非A)。Click(function(){)
Window.open(/);
Window.open(/);
Window.open(/);
Window.open(# 58blank);
警报(过度!);
});
一
dddd
结果表明:除IE和360se,不允许打开两个或两个以上的子弹Windows的同时,其他所有的浏览器都可以打开所有窗户正常,但360se实际上也阻止弹出窗口而停止后续脚本执行!
3、对标签进行同样的操作,在2,最后得出的结论是一致的,不再将这里描述。同可见上述测试,打开多个窗口,打开一个窗口的基本行为,只是做一些额外的治疗,在某些情况下,所谓的360se安全浏览器只,所以测试将仅次于考试的差异。在相应的弹出窗口的行为不同的网址将被进一步解释。
4,很多时候我们将执行基于Ajax请求返回的结果window.open操作,那么可以在这个时候开门
$(# tag-a,#非A)。Click(function(e){ {)
E.preventDefault();
$ ajax({
/ /异步:假,
URL:,
成功:函数(){
Window.open(/);
}
});
返回true;
});
叫的
作为一个结果,这360se能打开弹出窗口,和所有其他的浏览器一直封锁弹出。
5,重复讨论第四,修改Ajax请求同步请求,看看有什么反应。结果表明所有浏览器都能正常打开窗口,所以结论是同步操作可以删除浏览器对弹出窗口的限制。
6,事实上,有一个非常恶心的场面,当然,可以避免在其他方面。但如果你必须再做一遍呢还得看一看。
如果你想在点击链接时点击B,也可以点击(像大多数广告需要点击,很多人都这么做),我们需要使用这个场景。
$(#非A)。Click(function(){)
$(# tag-a)。Click();
});
dddd
在这种情况下,所有浏览器都会对JS触发和鼠标触发事件做出正确判断,因此他们不会自动打开链接,这会影响他们的情绪。从上面的分析,很容易得到以下解决方案:添加点击事件所需的连接,然后打开窗户,通过单击事件登记window.open。
$(# tag-a)。Click(function(){)
E.preventDefault();
Window.open($(this)。Attr('href '));
返回false;
});
于是,蜕变的需要得以实现,站长偷走了喜悦!(事实上,没有两添加window.open事件直接触发标签)。
P >
通过以上分析,我们可以看到浏览器对鼠标单击和JS触发单击有不同的行为控制。这主要是要判断标准的触发事件必须是真实的鼠标事件和事件执行的连续性。另外,打开多个窗口同时也将通过一些浏览器的安全保护。所以,开始流行将自动打开鼠标的单击事件受阻,和易拉罐正常开放;和异步操作Ajax也将允许浏览器是鼠标单击事件的不连贯,所以需要完成的同步请求。