记录一次弹窗被浏览器拦截的问题

1,488 阅读1分钟

背景

异步获取待跳转地址 url,使用 window.open(url) 打开该地址,被部分浏览器拦截.

原理

window.open 为用户行为触发时,不会被浏览器拦截,由 js 异步触发时,可能会被浏览器拦截.

解决方案

  1. 在获取跳转地址前打开一个空白页面
  2. 获取地址后将该页面重定向到待跳转地址

伪代码:

function openUrl() {
    /** 打开一个空页面 */
    const newWindow = window.open('about:blank')
    
    /** 获取地址后进行重定向 */
    getUrl().then(res => {
        newWindow.location.href = res.url
    })
}