javascript - 如何在我的内容脚本中使用 chrome.download?
问题描述
我正在尝试使用 chrome.download 方法下载 CSV 文件类型并在下载时更改文件的名称。
目前,我正在使用
document.querySelectorAll("[file$='foo']").forEach(a=>a.click());
模拟单击要下载的每个元素。但是,下载时的每个文件名都是 foo.csv、foo(1).csv 等。最后我想下载文件并更改文件名。目前我正在通过内容脚本执行此操作,并且从我所阅读的内容来看,我无法访问 chrome.download API,并且必须使用来自我的 background.js 的消息传递。
据我了解,与此类似的其他帖子涉及创建一个新的元素/内容以供下载,而不是下载网站上已有的内容。
任何帮助是极大的赞赏!谢谢!!
我的背景.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);
解决方案
这不成问题。有 chrome.downloads 事件onDeterminingFilename,它有助于“建议”下载项目的文件名。此 API 可用于后台页面:
- 创建一个名为“background.js”的文件
- 将对它的引用放在清单中。
"background": {
"scripts": ["background.js"],
}
- 向清单部分添加“下载”权限
- 这段代码正在做你想做的事:
chrome.downloads.onDeterminingFilename.addListener((item, suggest) => {
// "item.filename" - the current filename
suggest({
filename: 'new-name.csv'
});
});
推荐阅读
- sharepoint - 无法使用 Microsoft Graph API 获取更多基本用户信息
- k-means - 如何计算图像压缩比?
- sql - sql查询以升序获取输出
- kubernetes - helm 和 kubectl 上下文不匹配
- c# - 为什么这个 lambda 表达式需要将字符串转换为字符串?
- java - 页面对象模型 Selenium,在测试类中添加等待
- javascript - 在此 PHP 站点中找不到更改超全局变量的位置
- database - 如何将日志从 DB 移动到 oracle 中的其他归档格式
- ios - NSTimer 迭代 4
- python - 单击 selenium python 后从菜单中选择