目前很多文章对于浏览器拦截,都用js里新建个a标签,taregt设置为"_blank"的方法,然后模拟用户click点击。
实际实验,此方法并不可行,依然会被拦截。
经实验后发现,如果一个button直接调用window.open,并不会触发浏览器的拦截操作。
例如:
$(".canView").click(function(){
var _this = $(this);
window.open(path); 此处可成功
})
但是,如果和后台交互后(例如ajax去校验参数),再window.open浏览器会认为是恶意链接,从而阻止。
例如:
$(".canModify").click(function(){
ajaxInSameDomain(url, "regStatus=06&supplierInfoId=" + _this.attr("cz"), 'POST', function(data){
if (data.mark == "success") {
window.open(path); //此处会拦截,因为之前有ajax请求和后台交互过。
}else if(data.mark == "hasStop"){
return;
}
}, null);
});
解决办法:
在没有ajax调用前先开一个空白页,调用后将这个空白页内容刷新为要打开的页面。
$(".canModify").click(function(){
var test01 = window.open(); //此处不会拦截
ajaxInSameDomain(url, "regStatus=06&supplierInfoId=" + _this.attr("cz"), 'POST', function(data){
if (data.mark == "success") {
path=需要弹出的页面URL;
test01.location = path;//此处会将弹出的页面内容刷新为原先需要弹出页面的内容,从而绕过拦截
}else if(data.mark == "hasStop"){
return;
}
}, null);
});