首页 > 解决方案 > 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"});

当我单击工具栏按钮时,分析​​会运行,但我没有看到“保存”对话框,磁盘上也没有出现任何文件。我究竟做错了什么?

标签: javascriptgoogle-chrome-extension

解决方案


不确定您是否已解决此问题,或者此修复程序是否解决了您的问题,但我刚刚发现下载 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);

推荐阅读