我正在创建Chrome扩展程序。我有一系列网址,我想一个一个地下载它们,一次一个(意味着第二次下载只会在第一次完成之后才开始等等)。
我试过这个:(“链接”是数组)
function doDownloads(links, iterator, max) {
chrome.downloads.download({
url: links[iterator],
saveAs: false
}, function(downloadId) {
if (iterator < max)
chrome.downloads.onChanged.addListener(function goToNextDL(delta) {
if (delta.id == downloadId) {
chrome.downloads.onChanged.removeListener(goToNextDL);
if (delta.state && delta.state.current === 'complete' && iterator + 1 < max)
doDownloads(links, iterator + 1, max);
}
});
});
}
但它不起作用):
任何想法?
答案 0 :(得分:1)
这应该有用......
var Dest='';
for(var i=0; i<links.length; i++){
Dest='image'+i+'.jpg';
chrome.downloads.download({url:links[i] ,filename:Dest, conflictAction:'overwrite'});
}
注意:我已添加了用于更改目标文件名的简单逻辑。
答案 1 :(得分:0)
这种方法怎么样?
var Counter=0; // global var
function DownloadURL(URL){
var DL=new XMLHttpRequest();
DL.onload=function(evt){var arraybuffer=DL.response;};
DL.addEventListener('load', function(evt){ Counter++; if(Counter<Links.length){DownloadURL(Links[Counter]);} }); // increment to next file
DL.open('GET',URL,true);
DL.responseType='arraybuffer';
DL.send();
}
叫它一次让球滚动......
DownloadURL(Links[Counter]);
答案 2 :(得分:0)
经过几次尝试,我得到了解决问题的方法。 这是正确的代码:
function doDownloads(links, iterator, max) {
chrome.downloads.download({
url: links[iterator],
saveAs: false
}, function(downloadId) {
if (iterator < max + 1)
var goToNextDL = function(delta) {
if ((delta.id == downloadId) && (delta.state) && (delta.state.current != "in_progress")) {
chrome.downloads.onChanged.removeListener(goToNextDL);
if (delta.state.current === 'complete')
doDownloads(links, iterator + 1, max);
}
};
chrome.downloads.onChanged.addListener(goToNextDL);
});
}
var array_of_links = [...];
doDownloads(array_of_links, 0, array_of_links.length);
&#13;