解决Chrome,Firefox拦截多个文件下载

现在主流浏览器(Chrome,Firefox)等都会拦截多个文件的下载请求或者连续的弹出窗口

无论是开发还是F12爬取,有时候要一次性下载页面上的多个内容,都会在这里遇到障碍,所以很多解决方案都是发送一个包的ID给后端,然后让后端打包后下载压缩包

这样的话徒增了后端的压力

找到一种解决方案,就是用iframe

const download = (url, triggerDelay, removeDelay) => {
  setTimeout(() => {
    const frame = $('<iframe/>').attr({ style: 'display:none', class: 'multi-download', src: url })
    $(document.body).after(frame)
    setTimeout(() => {
      frame.remove()
    }, removeDelay)
  }, triggerDelay)
}

使用这个函数来下载,会创建一个隐藏的iframe来打开url,这样的话就不会打开多个标签页,也不会一个标签页一次性快速连续下载多个文件,都是一个子窗口下载一个文件,循环调用一下就可以了

其中
url是要下载的文件链接
triggerDelay是要打开的延时,一般使用index * 1000来保证1秒打开一个窗口,如果某些浏览器性能不强,1秒也会被拦截,可以改大一点,当然改小也可以,但是容易有几个会被拦截,所以我建议1s
removeDelay是iframe窗口关闭的延时,是要保证触发了下载之后再关闭,我自己设置的时候用的3000,也就是3s