在chrome扩展中下载网址数组

时间:2018-01-14 00:54:57

标签: javascript google-chrome google-chrome-extension

我正在创建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);
				}	
			});
	});
}

但它不起作用):

任何想法?

3 个答案:

答案 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)

经过几次尝试,我得到了解决问题的方法。 这是正确的代码:

&#13;
&#13;
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;
&#13;
&#13;