Javascript 浏览器正在取消多个文件下载请求

Javascript 浏览器正在取消多个文件下载请求,javascript,browser,download,Javascript,Browser,Download,我正在尝试下载用户选择下载的多个文件。但是,浏览器正在取消除上次下载请求以外的所有下载请求。如果我将请求之间的延迟增加到1秒左右,那么这些文件会被下载,但即使在这种情况下,有时也会丢失一些文件。这些文件是从AmazonS3URL(即,这些是CORS)下载的 为此,我使用url创建一个锚元素,然后使用javascript对其调用click事件 downloadFile(url) { let a = document.createElement('a'); a.id = url;

我正在尝试下载用户选择下载的多个文件。但是,浏览器正在取消除上次下载请求以外的所有下载请求。如果我将请求之间的延迟增加到1秒左右,那么这些文件会被下载,但即使在这种情况下,有时也会丢失一些文件。这些文件是从AmazonS3URL(即,这些是CORS)下载的

为此,我使用url创建一个锚元素,然后使用javascript对其调用click事件

downloadFile(url) {
    let a = document.createElement('a');
    a.id = url;
    // a.setAttribute('target', 'blank');
    a.download = '';
    a.href = url;
    // firefox doesn't support `a.click()`...
    // console.log('dowmloading ' + url);
    a.dispatchEvent(new MouseEvent('click'));
    a.remove();
}
然后在下载按钮上单击事件我正在执行以下操作:

let delay = 0;
        urlList.forEach(url => {
            return setTimeout(downloadFile.bind(null, url), 100 * ++delay);
        });
有没有办法做到这一点

为什么浏览器会取消这些请求

为什么浏览器会取消这些请求

因为您实际上是通过单击下一个链接来“取消导航”,在浏览器完全完成单击上一个链接时必须执行的操作之前

如果这不是下载,而是指向页面的常规链接,那么这就是您想要的行为-如果用户先单击指向页面a的链接,然后失去耐心并单击指向页面B的另一个链接,那么此时对页面a的请求将被取消-无需加载两个资源,但同时只能显示一个

我认为,如果你不想找出一个超时的“神奇数字”以某种方式使它“起作用”,那么你对此无能为力——特别是因为你不知道这在一般情况下是否起作用,或者可能只是在你的机器上,通过你的互联网连接,等等

我正在尝试下载用户选择下载的多个文件

您可以在服务器上动态地将这些选定的文件包装成容器格式,例如ZIP(严格来说,不仅仅是一个“容器”),这样用户只需下载一个文件(然后他们必须在自己的机器上再次解包)


或者更改文件选择过程以开始。与其让用户用复选框或类似的东西标记他们想要的文件,不如给他们提供指向文件的直接链接?然后他们可以一个接一个地点击他们想要的每一个,然后“正常”的下载功能就会出现。

无论如何,包括SSCCE的代码和更多细节,比如“浏览器”是什么,如果不同,“浏览器”实现的行为不同。这是chrome和firefox浏览器中的行为。请求立即被取消。我有他们两个的最新版本。谢谢你的解释,也谢谢你建议另一种方法。我一定要尝尝那些。