chrome.downloads.download忽略“ url”之后的参数

时间:2019-05-26 06:16:40

标签: google-chrome-extension

我正在尝试编写一个简单的扩展程序,该扩展程序将自动将图像从我们公司的网站下载到目录中。问题是chrome.downloads.download似乎忽略了'url'之后的每个参数。 它下载文件。但是保留原始名称,并忽略子目录。如果文件已经退出,则会附加(#),而不是按照代码中的指定进行覆盖。

我尝试了各种方法来实现传递给chrome.downloads.download的对象,包括创建带有所有参数的对象并传递该对象。即使在没有意义的地方,我也尝试使用引号。 我尝试过重新格式化文件名参数,甚至给它一个固定值“ foo.jpg”。我尝试在content.js和bs.js中都这样做。 我已经确认文件名已传递到后台脚本,并且可以通过在后台脚本中用alert()显示该文件名来访问该值

//Manifest.js (important parts)
"permissions": ["downloads","webNavigation"],
"background": {
    "scripts": ["bs.js"],
    "Persistent": false
    },
"content_scripts": [
    {
        "matches": ["<all_urls>"],
        "js": ["jquery-3.4.1.min.js"]
    },
    {
        "matches": ["https://mycompany.com/*"],
        "js": ["content.js"]
    }

    ]

//Content.js (important parts)
var $imgs = $('#spec_jpg img');
var url = "https:" + $imgs.attr('src');
var filename ="specificationArchive/" +  url.substring(url.lastIndexOf('/')+1); //edited
chrome.runtime.sendMessage({url: url, filename: filename});

//bs.js (whole thing)
chrome.runtime.onMessage.addListener(
    function(request, sender){
      chrome.downloads.download ( { url: request.url,
      filename: request.filename,
      conflictAction: "overwrite",
      saveAs: false }
      )
    }
);

该扩展名确实下载了该文件,但我希望它可以将其保存到名为specificationArchive的子目录中。我还希望它会覆盖现有文件,而不是在名称末尾附加(#)。即使为文件名传递了绝对字符串,我也得到了文件的原始名称

1 个答案:

答案 0 :(得分:0)

wOxxOm提供的解决方案是添加一个附加的侦听器。这是添加到bs.js的代码

//bs.js
chrome.downloads.onDeterminingFilename.addListener(function(item, suggest) {
suggest({filename: "specificationArchive/" + item.filename, conflictAction: 'overwrite'});
});

一旦包含此内容,它将保存到列出的目录中。 再次感谢。