可以 javascript 在开发工具控制台 download/save 文件中,还是这个沙盒?

Can javascript in the dev tools console download/save files, or is this sandboxed?

我正在尝试编写一个类似书签的 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);
        }
    }
}

此脚本的工作原理在于它为每个图像提供了正确的 src links。有没有办法让 javascript download/save 每个 link 自动?可以单击每个 link(Chrome 在新选项卡中打开它们),但这样做有点乏味。

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

请注意,此 javascript 不会直接包含在网页中,而是专门针对来自开发工具控制台的 运行。

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

$("body").append($("<a id='xyz'/>"));

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

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

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

最后,JavaScript 可以向锚标记本身发出点击事件:

$('#xyz')[0].click();

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

$("body").append($("<a id='xyz'/>"));

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

VM42:1 Uncaught DOMException: Failed to execute '$' on 'CommandLineAPI': '<a id='xyz'/>' is not a valid selector. at <anonymous>:1:18

请尝试使用以下代码,使用普通的旧 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();

您可以查看this answer中的详细解释。