触发多个链接以下载文件

时间:2017-12-05 16:46:35

标签: javascript jquery

我有一个网页,我可以找到随机数量的文件进行下载。我想开发一个小的FireFox扩展来一次下载所有文件。到目前为止,我有以下功能来下载这些文件:

function getFilesJQ () {
    var $dlLinks = $('a').filter(function(index) { return $(this).text() === "Download"; });

    $dlLinks.each(function () {
        $(this).trigger('click');
    });
}

问题是,只点击了第一个链接,并开始下载相应的文件。其他人没有被触发。

问题在哪里?这甚至可能吗?

修改

这就是$ dlLinks的样子:

{…}
0: <a id="exerciseResourcesForm:a3:0:linkDownload" href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('exerciseResourcesForm'),{'exerciseResourcesForm:a3:0:linkDownload':'exerciseResourcesForm:a3:0:linkDownload'},'');}return false">
1: <a id="exerciseResourcesForm:a3:1:linkDownload" href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('exerciseResourcesForm'),{'exerciseResourcesForm:a3:1:linkDownload':'exerciseResourcesForm:a3:1:linkDownload'},'');}return false">
2: <a id="exerciseResourcesForm:a3:2:linkDownload" href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('exerciseResourcesForm'),{'exerciseResourcesForm:a3:2:linkDownload':'exerciseResourcesForm:a3:2:linkDownload'},'');}return false">
3: <a id="exerciseResourcesForm:a3:3:linkDownload" href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('exerciseResourcesForm'),{'exerciseResourcesForm:a3:3:linkDownload':'exerciseResourcesForm:a3:3:linkDownload'},'');}return false">
length: 4
prevObject: Object { 0: a, 1: a, 2: a, … }
__proto__: Object { jquery: "3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector", constructor: r(), length: 0, … }
jack_download.js:10:2

单击其中一个链接时,将发出POST请求:

POST 
https://*******/emp/ExerciseEdit.jsf 
[HTTP/1.1 200 OK 28ms]
POST 
https://sb-ssl.google.com/safebrowsing/clientreport/download 
[HTTP/2.0 200 OK 109ms]

2 个答案:

答案 0 :(得分:0)

$(this).trigger('click');

这可能会打开当前页面上的链接,从而终止当前页面。您可以尝试以新的方式打开它:

window.open(this.href, "Download");

答案 1 :(得分:0)

有一点需要考虑这些链接的target属性。如果未定义target,则您的click操作将打开新会话,您的后续下载将被取消。解决这个问题的一个简单方法是“强制”这些链接在新窗口中打开:

function getFilesJQ () {
    var $dlLinks = $('a').filter(function(index) { return $(this).text() === "Download"; });

    $dlLinks.each(function () {
        window.open(this.href);
    });
}

但请注意,您的浏览器可能会将其解释为多个弹出窗口,并尝试阻止它们。您可能还必须关闭弹出窗口阻止程序。