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 事件,打开新窗口,也是可以实现的。但是感觉对于我的场景需要自动关闭窗口的需求,这个方案并不好。代码量有点多。