Skip to content

window.open 打开新的标签页,被浏览器拦截了处理方法

问题描述

今天有个需求就是做意愿认证,异步获取意愿认证的url,然后通过window.open打开这个url,前端轮询认证结果,认证完成之后自动关闭标签页。

但是使用 window.open(url,'_blank') 被拦截了,所以就无法打开这个url了。

分析原因

经过搜索,发现这个被拦截的原因是:谷歌浏览器为了防止网页弹出广告,所以默认拦截了非用户操作的 window.open() 方法。需要说明的是,用户点击而打开的窗口不会被拦截。比如说一个 a 标签的点击事件,点击之后会打开一个新窗口,这个新窗口不会被拦截,因为浏览器认为这个操作是由用户触发的。

还有就是好像只有谷歌浏览器会拦截 window.open(url,'_blank') 方法,其他浏览器,比如说一些国产浏览器,不会拦截。

解决方法

方案一(采用)

我就是通过setTimeout()方法,延迟 0.5 秒执行 window.open(url,'_blank') 方法。

注意 但是这个时间间隔最好是大于0.1秒,不超过1秒。

方案二

使用模拟 a 标签点击的方式,监听 onclick 事件,打开新窗口,也是可以实现的。但是感觉对于我的场景需要自动关闭窗口的需求,这个方案并不好。代码量有点多。

Released under the ISC License.