浏览器阻止新窗口(window.open或新窗的form提交)

在写js时,经常会出现浏览器会阻止用js写的window.open代码,但是,又不是每次都会阻止,它只会阻止特定情况下的window.open。因为如果浏览器默认都阻止window.open代码是不现实的,所以观察chrome浏览器对window.open阻止情况的总结如下:
浏览器不会阻止用户主动发起的window.open方法;浏览器一般都会阻止非用户主动发起的window.open。
这里有一个问题,什么叫用户主动发起?
如下代码在执行过程中就是用户主动发起
http://www.baidu.com‘,’_blank’);”>百度
如下代码在执行过程中会被认为非用户主动发起:
http://www.baidu.com‘,’_blank’)},2000);”>百度
也就是说,用户触发一个事件后,事件处理函数所执行的window.open会被认为是合理的不会被阻止;但是,如果是由异步方式再执行window.open 会被浏览器阻止,因为浏览器认为不是由用户主支发起的,而是js代码自己发起的。这里就涉及到js前端代码经常会用到的ajax调用了,如果用到ajax时用的是异步执行(默认都是异步执行),那么就会经常出现window.open会被阻止。解决的方法是把ajax设置成同步。
$.ajax({
async: false, //就是设置这个最为关键的ajax同步
type: ‘POST’,
url: ctx + “/sales/submitBank”,
data: orderPost,
success: function(datas){
result = datas;
}
});
以上描述同样适用于form提交
Dwr可以直接改写参数:
async:false即可

转自:点击

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值