可以在开发工具控制台中使用javascript下载/保存文件,还是这个沙箱?

Joh*_*n O 6 javascript google-chrome-devtools firefox-developer-tools

我正在尝试编写一个类似bookmarklet的js代码段,可以从开发人员工具控制台运行,该控制台将为页面中的图像提供src:

var x = ["PA633", "PA10", "PA11"];
function nextPage(i) {
    $('#viewport div:first-child').animate({scrollTop: i}, 200);
    i+=1020;
    if (i < 20000) { setTimeout(nextPage, 200, i); }
    for (index = 0; index < $('div.pageImageDisplay img').length; ++index) {
        var page = /&pg=([A-Z]{2,3}\d+)&/.exec($('div.pageImageDisplay img')[index].src);
        if ($.inArray(page[1], x) != -1) {
            x.splice(x.indexOf(page[1]), 1);
            var embiggen = $('div.pageImageDisplay img')[index].src.replace(/&w=\d+$/, "&w=1200");
            console.log(embiggen);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此脚本的工作原理是它为每个图像提供正确的src链接.有没有办法让javascript自动下载/保存每个链接?可以点击每个链接(Chrome在新标签中打开这些链接),但这样做有点乏味.

正确的方法是让javascript片段将图像保存到下载文件夹本身,但我有一个模糊的概念,这是不可能的.是否可能,如果是这样,怎么可能实现呢?

请注意,此javascript不会直接包含在网页中,而是专门用于从开发工具控制台运行.

Eva*_* MJ 7

$("body").append($("<a id='xyz'/>"));
Run Code Online (Sandbox Code Playgroud)

上面的代码在某些版本的 Chrome 中出现以下错误:

VM42:1 Uncaught DOMException: Failed to execute '$' on 'CommandLineAPI': '<a id='xyz'/>' is not a valid selector. at <anonymous>:1:18
Run Code Online (Sandbox Code Playgroud)

请使用普通的旧 Javascript 尝试以下代码。

var url = 'your url goes here';
var elem = document.createElement('a');
elem.href = url;
elem.download = url;
elem.id="downloadAnchor";
document.body.appendChild(elem);
$('#downloadAnchor').click();
Run Code Online (Sandbox Code Playgroud)

你可以查看这个答案的详细解释。

  • 非常好,谢谢!我发现我需要将最后一行更改为 `$('#downloadAnchor')[0].click();` 才能工作。 (2认同)

Joh*_*n O 5

这需要几个不同的部件才能工作.首先,有必要添加(除非您可以重用现有的)链接到页面,如下所示:

$("body").append($("<a id='xyz'/>"));
Run Code Online (Sandbox Code Playgroud)

然后,您需要将链接的href设置为要下载的文件的href:

        $('#xyz').attr("download", page[1] + ".png");
        $('#xyz').attr("href", embiggen);
Run Code Online (Sandbox Code Playgroud)

请注意,我们也可以(至少在Chrome中)通过下载属性自动设置文件名.

最后,javascript可以向锚标签本身发出一个click事件:

        $('#xyz')[0].click();
Run Code Online (Sandbox Code Playgroud)

运行时,它会自动下载文件.设置文件名似乎也阻止它弹出文件对话框.