我正在尝试使用chrome.download方法下载CSV文件类型,并在下载后更改文件名。
当前,我正在使用
document.querySelectorAll("[file$='foo']").forEach(a=>a.click());
模拟对要下载的每个元素的单击。但是,下载时的每个文件名都是foo.csv,foo(1).csv等。最后,我想下载文件并更改文件名。目前,我是通过内容脚本来执行此操作的,并且从我拥有的read中我无法访问chrome.download API,必须使用我的background.js消息传递。
根据我的理解,与此类似的其他帖子涉及创建一个新的元素/内容进行下载,而不是下载该站点上已有的内容。
任何帮助将不胜感激!谢谢!!
我的background.js
function changeName(prevName){
chrome.downloads.onDeterminingFilename.addListener((prevName, suggest) => {
suggest({
filename: 'new-name.csv'
});
});
};
chrome.runtime.onMessage.addListener(function(msg, sender) {
if ((msg.action === 'renameSave')
&& (msg.params !== undefined)) {
changeName(msg.params);
};
});
和我的contentscript.js
button.addEventListener('click', function() {
var elems = document.getElementsByClassName("Stmt");
var count = 1;
var interval = setInterval(function(){
elems[count].click();
chrome.runtime.sendMessage({
action: 'renameSave',
params: ["statement.csv"]
});
count = count + 2;
if(count > elems.length){
clearInterval(interval);
}
},800);
}, false);
答案 0 :(得分:0)
这不是问题。有chrome.downloads事件onDeterminingFilename,它有助于“建议”下载项目的文件名。该API可用于后台页面:
"background": {
"scripts": ["background.js"],
}
chrome.downloads.onDeterminingFilename.addListener((item, suggest) => {
// "item.filename" - the current filename
suggest({
filename: 'new-name.csv'
});
});
答案 1 :(得分:0)
您可以在侦听器函数中放置一个变量,而不是const字符串(文件名:fileNameVar ):
function changeName(prevName){
chrome.downloads.onDeterminingFilename.addListener((prevName, suggest) => {
suggest({
filename: fileNameVar
});
});
};
chrome.runtime.onMessage.addListener(function(msg, sender) {
if ((msg.action === 'renameSave')
&& (msg.params !== undefined)) {
changeName(msg.params);
};
});
这样,您可以每次使用全局变量或chrome.storage
API来更改fileName。