window.open()拦截

316 阅读1分钟

昨天我正在高强度coding(摸鱼)的时候,突然线上出现了一个bug,导出excell表有时候被浏览

器拦截了,但是奇怪的是:不是百分百拦截,有时候传的参数不一样,结果是不一样的。

我火速去看了下,发现是window.open()的问题。

当时就开启了面向baidu,google编程,发现了很多方法都不行。这里原理什么的就不用多说了,都知道浏览器阻止了恶性弹窗。

最后发现,如果使用延时器,好趣的现象发现了,我自己的理解。

从用户点击动作到执行window.open 中间有没有超过5秒钟,超过了就开始拦截了

 const url = 'xxxx'
 setTimeout(()=>{
     window.open(url)
 },5000)

最后为了保证每次都能导出,只能出此下策,通过创建一个a标签的形式

    const fileUrl = result.resultUrl;
    const blob = new Blob([fileUrl]);
    const aTag = document.createElement('a');
    aTag.download = '我是导出单名称';
    aTag.href = URL.createObjectURL(blob);
    URL.createObjectURL(blob);
    aTag.href = fileUrl;
    aTag.click();
    URL.revokeObjectURL(aTag.href);

但是,最终我还是没有明白为什么传给后端参数不同的时候,window.open()有时候会拦截,有时候不会拦截,希望有知道的朋友,能探讨一下。