如何解决浏览器弹出窗口的拦截

问题

有时候在开发业务时,由于产品体验,要求自动打开新窗口,而不希望用户手动点击。
直接在代码中执行:

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

是会被浏览器拦截的,浏览器是默认屏蔽弹出窗口,但是是用户手动触发,就不会拦截,如果是程序自动执行,则会拦截。

解决

那么根据上述规则,那就在用户有点击动作时打开这个窗口,伪代码如下:

 <a href="javascript:;" id="blank">test</a>
 document.getElementById('blank').onclick=function(){
    window.open(...)
 }

示例在此

不过,这方式在异步编程中还是会被拦截,所以在用户点击发送请求的同时打开一个新窗口,然后在回调函数中修改新窗口的地址,伪代码如下:

 <a href="javascript:;" id="blank">test</a>
 document.getElementById('blank').onclick=function(){
    const newwin = window.open('about:blank');
    $.ajax({
       type: 'post',
       url: 'xxxx',
       data: {...},
    }).then((data)=>{
      ...
      newwin.location.href = data.href; // 调用location
    })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值