如何使用window.location.href下载多个文件?

Gra*_*min 4 javascript download

我有以下javascript:

function downloadFiles(){
  var files = [];
  files.push('mysite.com/file1.txt');
  files.push('mysite.com/file2.txt');
  files.push('mysite.com/file3.txt');

  for(var ii=0; ii<files.length; ii++){
    window.location.href = files[ii];
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是这只会下载列表中的最后一个文件,因为前两个文件被最后一个文件覆盖.在继续下一个文件之前,如何等待用户对每个文件的输入?

Gra*_*min 9

我最终做了什么:

function downloadFiles(){
  var files = [];
  files.push('file1.txt');
  files.push('file2.txt');
  files.push('file3.txt');

  for(var ii=0; ii<files.length; ii++){
    downloadURL(files[ii]);
  }
}

var count=0;
var downloadURL = function downloadURL(url){
  var hiddenIFrameID = 'hiddenDownloader' + count++;
  var iframe = document.createElement('iframe');
  iframe.id = hiddenIFrameID;
  iframe.style.display = 'none';
  document.body.appendChild(iframe);
  iframe.src = url;
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,但它仅适用于1-10个文件.如果你为20个文件执行此操作 - chrome将仅下载10.FF和IE将跳过很多并弹出一个很大的"在哪里下载?" 对话框.因此,如果您想要为浏览器提供许多文件,则可以使用压缩方式. (2认同)

Chr*_*ris 7

如果您更改要使用的代码window.open()而不是window.location,则可以同时启动所有三个下载.

我知道这不满足在呈现每个下载之前等待用户输入的要求,但它确实构建了原始代码的精神.希望它会有所帮助.

function downloadFiles(){
  var files = [];
  files.push('file1.txt');
  files.push('file2.txt');
  files.push('file3.txt');

  for(var ii=0; ii<files.length; ii++){
    window.open(files[ii]);
  }
}
Run Code Online (Sandbox Code Playgroud)