2021-08-12:浏览器使用window.open 新页签被拦截的问题

前端关于在使用 window.open 打开新页面时会被部分浏览器拦截的问题

背景

通常我们想要打开一个新页签来展现一个页面时,一般会使用 a 标签 或者 window.open 来实现。但当我们在回调中使用 window.open 时,会发现这个跳转会被浏览器拦截,但若是用户主动点击来操作的 window.open,我们会发现浏览器不会被拦截。这是因为当我们在一个 ajax 回调中使用 window.open 时,会被浏览器默认为一个广告弹窗的显示,所以浏览器会将其做拦截操作。

解决方案

当我们需要在一个 ajax 回调中来使用 window.open 做跳转时,这里推荐两种简单又快捷的方式来实现。

一:

我们可以在 ajax 回调中创建 a 标签 的方式来跳转。
在这里插入图片描述
这种方式亲测在 safari 及 谷歌 浏览器中可以实现不会被浏览器拦截,但部分 mac的safari也会被拦截,这里不知是默认浏览器设置被改过还是什么原因,暂时无结果,但大部分的 safari 都是可行的。

二:

第二种方法则是本人觉得最好的方案。
在这里插入图片描述
这种方式是先在触发 ajax 请求之前,先打开 页面。然后在 ajax 回调成功之后重新定向 url链接。
在这里插入图片描述
但是这种方法会有一个小瑕疵,那就是如果你的接口返回速度不快的话,会导致在回调成功这段时间跳转页面时会有一段时间的空白页,所以此时我们可以在 ajax 回调前定义一个 loaging组件,回调成功后关闭这个 loading组件,这样就完美实现啦。
并且第二种方法本人亲测在 safari,谷歌,火狐及 IE10以上浏览器都兼容噢

结束语

至此,这个功能就完美实现了,如果觉得有用的话,点个赞在走吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值