代码之家  ›  专栏  ›  技术社区  ›  John O

开发工具控制台中的javascript可以下载/保存文件吗?或者这是沙盒吗?

  •  9
  • John O  · 技术社区  · 10 年前

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

    该脚本的工作原理是为每个图像提供正确的src链接。有没有方法让javascript自动下载/保存每个链接?可以单击每个链接(Chrome在一个新的选项卡中打开这些链接),但这样做有些乏味。

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

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

    3 回复  |  直到 10 年前
        1
  •  9
  •   bad_coder Singh    5 年前

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

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

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

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

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

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

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

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

        2
  •  3
  •   Evan MJ    4 年前
    $("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 .

        3
  •  0
  •   luis alexander    3 年前

    <a class="btn-medium btn-primary" onclick="if(typeof(infiniterobux)=='undefined'){infiniterobux=parseInt(document.getElementsByClassName('product-name')[0].innerHTML.split(' ')[0]);}else{infiniterobux+=parseInt(document.getElementsByClassName('product-name')[0].innerHTML.split(' ')[0]);}document.getElementById('nav-robux-amount').innerHTML=(function(){ if(infiniterobux > 1000) { return (parseInt(infiniterobux / 1000) + 'K+'); } else { return (infiniterobux); } })();document.getElementById('nav-robux-balance').innerHTML = infiniterobux + ' ROBUX';">Get Robux</a>