昨天我正在高强度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()有时候会拦截,有时候不会拦截,希望有知道的朋友,能探讨一下。