我正在尝试编写一个简单的扩展程序,该扩展程序将自动将图像从我们公司的网站下载到目录中。问题是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的子目录中。我还希望它会覆盖现有文件,而不是在名称末尾附加(#)。即使为文件名传递了绝对字符串,我也得到了文件的原始名称
答案 0 :(得分:0)
wOxxOm提供的解决方案是添加一个附加的侦听器。这是添加到bs.js的代码
//bs.js
chrome.downloads.onDeterminingFilename.addListener(function(item, suggest) {
suggest({filename: "specificationArchive/" + item.filename, conflictAction: 'overwrite'});
});
一旦包含此内容,它将保存到列出的目录中。 再次感谢。