在Firefox扩展中使用JavaScript和jQuery从页面下载多个文件

时间:2019-06-10 05:41:32

标签: javascript jquery

我开发了Firefox扩展程序,通过在具有不同链接的不同锚点上触发来从页面下载多个文件。

我在jQuery中用javascript做的事情

var $tr = $("tr");
var downloadLinks = [];

$.each($tr, function() {
    var tds = $(this).find("td");

    var name = tds.eq(1).find("span");
    var text = name.text();

    if (text.match(/\.Update\./gi)) {
        return true;
    }

    downloadLinks.push(tds.eq(2).find("a"));
});


if (downloadLinks.length > 0 && confirm("Found " + downloadLinks.length + " items to be downloaded. Download them now ?")) {

    for (var i = 0; i < downloadLinks.length; i++) {
        var $a = downloadLinks[i];
        var url = $a.prop("href");

        if (url.indexOf("http") < 0) {
            url = windows.location.protocol + "//" + windows.location.host + "/" + $a.prop("href").trim('/');
        }

        $a.prop("href", url);
        setTimeout(function() {
            $a.get(0).click();
        }, 800 * (i + 1));
    }
}

问题在于,只有最后一个项目被下载downloadLinks.length次。如果长度为20,则最后一项下载20次。

我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

这里的问题是$ a,当超时被触发时,$ a等于循环读取的最后一个对象。

尝试:

setTimeout(function(j) {
            var $a = downloadLinks[j];
            $a.get(0).click();
        }, 800 * (i + 1), i);

这应该有效。