chrome.download.download()转换为d/l一个带有扩展名的文件



系统:

  • Manjaro Linux
  • Chromium版本104.0.5112.79(官方版本(Arch Linux(64位(

当用户点击此MV3扩展的操作时,它会尝试将文件/text/Test.txt(与扩展打包(下载到下载目录:

https://github.com/GrippenDynamik/Download_Extension_File_MV3

manifest.json

{
"manifest_version": 3,
"name": "Download Extension File MV3",
"version": "1.0",
"action": {
"default_title": "Download Extension File MV3"
},
"background": {
"service_worker": "background.js"
},
"permissions": [
"downloads"
]
}

background.js

function onChanged(downloadDelta) {
console.log("MV3", "b) onChanged", "downloadDelta", downloadDelta);
}
async function onCreated(downloadItem) {
console.log("MV3", "a) onCreated", "downloadItem", downloadItem);
}
function onClicked(tab, onClickData) {
chrome.downloads.download({
conflictAction: "overwrite",
filename: "Test.txt",
saveAs: false,
url: chrome.runtime.getURL("text/Test.txt"),
});
}
chrome.downloads.onChanged.addListener(onChanged);
chrome.downloads.onCreated.addListener(onCreated);
chrome.action.onClicked.addListener(onClicked);

/text/Test.txt

This is a test.

结果:

  • chrome.downloads.onCreated不报告任何错误
  • chrome.downloads.onChanged报告NETWORK_FAILED(无其他(

我是做错了什么,还是无法下载带有扩展名的文件?

我知道我可以

  1. 获取((文件
  2. 将响应转换为数据URL
  3. 下载数据URL

但如果我能跳过步骤1和2,那就太好了。越简单越好。

和往常一样,问题出在MV3上。

https://bugs.chromium.org/p/chromium/issues/detail?id=1224027&q=下载。下载&can=2

"它不适用于chrome.downloads.download,后者不支持chrome扩展://scheme";

我不知道这是故意的,还是另一个MV3错误。

它在MV2:中完美工作

https://github.com/GrippenDynamik/Download_Extension_File_MV2

manifest.json

{
"manifest_version": 2,
"name": "Download Extension File MV2",
"version": "1.0",
"browser_action": {
"default_title": "Download Extension File MV2"
},
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": [
"downloads"
]
}

background.js

function onChanged(downloadDelta) {
console.log("MV2", "b) onChanged", "downloadDelta", downloadDelta);
}
async function onCreated(downloadItem) {
console.log("MV2", "a) onCreated", "downloadItem", downloadItem);
}
function onClicked(tab, onClickData) {
chrome.downloads.download({
conflictAction: "overwrite",
filename: "Test.txt",
saveAs: false,
url: chrome.runtime.getURL("text/Test.txt"),
});
}
chrome.downloads.onChanged.addListener(onChanged);
chrome.downloads.onCreated.addListener(onCreated);
chrome.browserAction.onClicked.addListener(onClicked);

/text/Test.txt

This is a test.

相关内容

最新更新