javascript - chrome.downloads.download 在后台服务人员中不起作用
问题描述
我正在尝试创建一个 Chrome 扩展程序,它会在单击工具栏按钮时对页面内容进行一些分析,然后将结果保存(即下载)到用户的机器上。单击按钮时,我可以进行分析,但无法触发下载。
这是我第一次编写 Chrome 扩展程序,所以任何帮助找出它为什么不工作的帮助将不胜感激!
清单.json
{
...
"permissions": [
"activeTab",
"downloads",
"scripting"
],
"background": {
"service_worker": "background.js"
}
}
背景.js
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: {tabId: tab.id},
files: ['analysis.js']
});
});
chrome.runtime.onMessage.addListener((arg, sender, reply) => {
chrome.downloads.download({
url: 'data:text/plain,' + arg.text,
filename: arg.name,
saveAs: true
})
});
分析.js
// Do some analysis here
chrome.runtime.sendMessage({name: "results.txt", text: "ANALYSIS RESULTS HERE"});
当我单击工具栏按钮时,分析会运行,但我没有看到“保存”对话框,磁盘上也没有出现任何文件。我究竟做错了什么?
解决方案
不确定您是否已解决此问题,或者此修复程序是否解决了您的问题,但我刚刚发现下载 API 仅适用于我在常规 Chrome 设置中未选中“下载前询问每个文件的保存位置”。我的解决方法(我认为它仅适用于 Manifest v3)是使用活动选项卡中的锚标记强制下载:
const anchor = document.createElement('a');
anchor.href = filedata;
anchor.download = filename;
document.body.appendChild(anchor);
anchor.click();
document.body.removeChild(anchor);
推荐阅读
- vb.net - 如何计算多个日期时间文本框
- c++ - Visual Studio 2019 nuget libcurl LNK2019 LNK1120
- scala - 如何将 rdd / 数据框 / 数据集转换为字符串
- htmlunit - HtmlUnit:登录成功后进行ajax调用以获取json数据
- c# - 使用 FastMember 从集合中获取值
- r - 为什么线图没有跟随 ggplot 中的第二个 y 轴?
- android - 滚动结束后使底部按钮出现
- mediawiki - 将 Url 的查询结果格式化为 Semantic MediaWiki 中的给定字符串
- javascript - 减少多个 if 语句的最佳方法是什么?
- sql - 将 Pandas Dataframe 输出从 NoneType 替换为 0