[工作中遇到的难点] window.open(url)打开链接被浏览器拦截解决方案

怎么打开关闭拦截入口:

https://jingyan.baidu.com/article/466506580d9828f549e5f8d1.html
也可以设置有些网站拦截,部分网站不拦截

[工作中遇到的难点] window.open(url)打开链接被浏览器拦截解决方案_第1张图片
preventSetup.png

为什么会出现这种情况:

当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这可能是一个广告,不是一个用户希望看到的页面。
而非用户操作最常见的case就是异步调用(事件,请求,setTimeout等)

谷歌+百度到的各种解决方案:

方案一:

let newwindow = window.open('_blank');
newwindow.location = url;
中间有空白页,需要额外解决。

方案2:a标签,form表单

方案3:利用ajax,设置异步请求变成同步请求,即async:false

试了上面几个,都没有好的解决方案。

最终解决方案:

采用参考链接解决了方案:
window.open('_blank')要在异步调用之前,然后拿返回的window对象去w去w.location.href
这样虽然解决了问题,但是和产品的初始需求有出入,产品的需求是在请求成功才打开跳转淘宝页面,但是我在未请求成功的时候(点击的时候就先打开了一个空白页面)
屁颠屁颠去找产品协商~~

参考链接:https://www.weipxiu.com/1193.html

扩展:
之前也遇到过一个需要模拟点击的情况,当时加了这句话,这句话时为了取消离开当前页面时候的提示语:
模拟a和form标签 取消$(window).off('beforeunload');事件绑定

你可能感兴趣的:([工作中遇到的难点] window.open(url)打开链接被浏览器拦截解决方案)