说明
使用 chrome.downloads API,以编程方式启动、监控、操纵和搜索下载内容。
权限
downloads您必须在扩展程序清单中声明 "downloads" 权限,才能使用此 API。
{
"name": "My extension",
...
"permissions": [
"downloads"
],
}
示例
您可以在 examples/api/downloads 目录中找到使用 browser.downloads API 的简单示例。如需查看其他示例以及查看源代码方面的帮助,请参阅示例。
类型
BooleanDelta
属性
-
当前
布尔值 (可选)
-
上一页
布尔值 (可选)
DangerType
枚举
“file”
下载的文件名可疑。
"url"
已知下载内容的网址是恶意网址。
"content"
已知下载的文件是恶意文件。
“uncommon”
下载内容的网址不常被下载,可能具有危险性。
“host”
下载内容来自已知会分发恶意二进制文件的主机,可能存在危险。
“垃圾内容”
下载内容可能是垃圾内容或不安全。例如,它可能会更改浏览器或计算机设置。
“safe”
下载内容对用户的计算机没有已知危险。
"accepted"
用户已接受危险下载。
"allowlistedByPolicy"
企业相关值。
"asyncScanning"
"asyncLocalPasswordScanning"
"passwordProtected"
"blockedTooLarge"
"sensitiveContentWarning"
"sensitiveContentBlock"
"deepScannedFailed"
"deepScannedSafe"
"deepScannedOpenedDangerous"
"promptForScanning"
"promptForLocalPasswordScanning"
"accountCompromise"
"blockedScanFailed"
"forceSaveToGdrive"
供安全企业浏览器扩展程序使用。必要时,Chrome 会阻止下载到磁盘,而是直接将文件下载到 Google 云端硬盘。
"forceSaveToOnedrive"
供安全企业浏览器扩展程序使用。必要时,Chrome 会阻止下载到磁盘,而是直接将文件下载到 OneDrive。
DoubleDelta
属性
-
当前
number 可选
-
上一页
number 可选
DownloadDelta
属性
-
canResume
BooleanDelta 可选
canResume的变化(如有)。 -
危险
StringDelta 可选
danger的变化(如有)。 -
endTime
StringDelta 可选
endTime的变化(如有)。 -
错误
StringDelta 可选
error的变化(如有)。 -
存在
BooleanDelta 可选
exists的变化(如有)。 -
fileSize
DoubleDelta 可选
fileSize的变化(如有)。 -
filename
StringDelta 可选
filename的变化(如有)。 -
finalUrl
StringDelta 可选
Chrome 54 及更高版本 browser.*(自 Chrome 148 起)finalUrl的变化(如有)。 -
id
数值
发生更改的
DownloadItem的id。 -
哑剧
StringDelta 可选
mime的变化(如有)。 -
已暂停
BooleanDelta 可选
paused的变化(如有)。 -
startTime
StringDelta 可选
startTime的变化(如有)。 -
州
StringDelta 可选
state的变化(如有)。 -
totalBytes
DoubleDelta 可选
totalBytes的变化(如有)。 -
网址
StringDelta 可选
url的变化(如有)。
DownloadItem
属性
-
byExtensionId
字符串 可选
如果此下载是由扩展程序发起的,则为发起此下载的扩展程序的标识符。一经设置便不会更改。
-
byExtensionName
字符串 可选
如果此下载是由扩展程序发起的,则为发起此下载的扩展程序的本地化名称。如果扩展程序更改了名称,或者用户更改了语言区域,则此名称可能会发生变化。
-
bytesReceived
数值
到目前为止从主机接收的字节数,不考虑文件压缩。
-
canResume
布尔值
如果下载正在进行中且已暂停,或者下载已中断且可以从中断处继续,则为 true。
-
危险
指明此下载内容是被认为安全还是已知可疑。
-
endTime
字符串 可选
下载结束时间,采用 ISO 8601 格式。可直接传递给 Date 构造函数:
chrome.downloads.search({}, function(items){items.forEach(function(item){if (item.endTime) console.log(new Date(item.endTime))})}) -
错误
下载中断的原因。多种类型的 HTTP 错误可能会归入以
SERVER_开头的错误。与网络相关的错误以NETWORK_开头,与将文件写入文件系统的过程相关的错误以FILE_开头,由用户发起的中断以USER_开头。 -
estimatedEndTime
字符串 可选
下载完成的预计时间(采用 ISO 8601 格式)。可直接传递给 Date 构造函数:
chrome.downloads.search({}, function(items){items.forEach(function(item){if (item.estimatedEndTime) console.log(new Date(item.estimatedEndTime))})}) -
存在
布尔值
下载的文件是否仍然存在。此信息可能已过时,因为 Chrome 不会自动监控文件移除情况。调用
search() 以触发文件存在性检查。存在性检查完成后,如果文件已被删除,则会触发onChanged事件。请注意,search() 在返回之前不会等待存在性检查完成,因此search() 的结果可能无法准确反映文件系统。此外,search() 可根据需要随时调用,但每 10 秒最多只能检查一次文件是否存在。 -
fileSize
数值
解压缩后整个文件中的字节数;如果未知,则为 -1。
-
filename
字符串
绝对本地路径。
-
finalUrl
字符串
Chrome 54 及更高版本 browser.*(自 Chrome 148 起)在所有重定向后,此下载来源的绝对网址。
-
id
数值
在浏览器会话之间保持不变的标识符。
-
无痕模式
布尔值
如果此下载记录在历史记录中,则为 false;如果未记录,则为 true。
-
哑剧
字符串
文件的 MIME 类型。
-
已暂停
布尔值
如果下载已停止从主机读取数据,但保持连接处于打开状态,则为 true。
-
referrer
字符串
绝对网址。
-
startTime
字符串
下载开始的时间,采用 ISO 8601 格式。可直接传递给 Date 构造函数:
chrome.downloads.search({}, function(items){items.forEach(function(item){console.log(new Date(item.startTime))})}) -
州
指示下载是正在进行、已中断还是已完成。
-
totalBytes
数值
整个文件中的字节数(不考虑文件压缩),如果未知,则为 -1。
-
网址
字符串
此下载在任何重定向之前发起的绝对网址。
DownloadOptions
属性
-
正文
字符串 可选
博文正文。
-
conflictAction
如果
filename已存在,则要执行的操作。 -
filename
字符串 可选
相对于“下载”目录的文件路径,用于包含下载的文件,可能包含子目录。绝对路径、空路径以及包含反向引用“..”的路径会导致错误。
onDeterminingFilename允许在确定文件的 MIME 类型和暂定文件名后建议文件名。 -
标头
HeaderNameValuePair[] 可选
如果网址使用 HTTP[s] 协议,则需要随请求一起发送的额外 HTTP 标头。每个标头都表示为一个字典,其中包含键
name以及value或binaryValue,仅限于 XMLHttpRequest 允许的键。 -
方法
HttpMethod 可选
如果网址使用 HTTP[S] 协议,则要使用的 HTTP 方法。
-
saveAs
布尔值 (可选)
使用文件选择器,让用户能够选择文件名,无论
filename是否已设置或已存在。 -
网址
字符串
要下载的网址。
DownloadQuery
属性
-
bytesReceived
number 可选
到目前为止从主机接收的字节数,不考虑文件压缩。
-
危险
DangerType 可选
指明此下载内容是被认为安全还是已知可疑。
-
endTime
字符串 可选
下载结束时间,采用 ISO 8601 格式。
-
endedAfter
字符串 可选
将结果限制为在给定毫秒数(采用 ISO 8601 格式)之后结束的
DownloadItem -
endedBefore
字符串 可选
将结果限制为在给定毫秒数(采用 ISO 8601 格式)之前结束的
DownloadItem。 -
错误
下载中断的原因。
-
存在
布尔值 (可选)
下载的文件是否存在;
-
fileSize
number 可选
解压缩后整个文件中的字节数;如果未知,则为 -1。
-
filename
字符串 可选
绝对本地路径。
-
filenameRegex
字符串 可选
将结果限制为
filename与给定正则表达式匹配的DownloadItem。 -
finalUrl
字符串 可选
Chrome 54 及更高版本 browser.*(自 Chrome 148 起)在所有重定向后,此下载来源的绝对网址。
-
finalUrlRegex
字符串 可选
Chrome 54 及更高版本 browser.*(自 Chrome 148 起)将结果限制为
finalUrl与给定正则表达式匹配的DownloadItem。 -
id
number 可选
要查询的
DownloadItem的id。 -
限制
number 可选
返回的匹配
DownloadItem的数量上限。默认值为 1000。设置为 0 可返回所有匹配的DownloadItem。如需了解如何对结果进行分页,请参阅search。 -
哑剧
字符串 可选
文件的 MIME 类型。
-
orderBy
string[] 可选
将此数组的元素设置为
DownloadItem属性,以便对搜索结果进行排序。例如,设置orderBy=['startTime']会按开始时间升序对DownloadItem进行排序。如需指定降序,请添加连字符前缀:“-startTime”。 -
已暂停
布尔值 (可选)
如果下载已停止从主机读取数据,但保持连接处于打开状态,则为 true。
-
查询
string[] 可选
此搜索字词数组会将结果限制为
DownloadItem,其filename、url或finalUrl包含所有不以短划线“-”开头的搜索字词,且不包含任何以短划线开头的搜索字词。 -
startTime
字符串 可选
下载开始的时间,采用 ISO 8601 格式。
-
startedAfter
字符串 可选
将结果限制为在给定毫秒数(采用 ISO 8601 格式)之后开始的
DownloadItem。 -
startedBefore
字符串 可选
将结果限制为在给定毫秒数(采用 ISO 8601 格式)之前开始的
DownloadItem。 -
州
State(州/省/自治区/直辖市)可选
指示下载是正在进行、已中断还是已完成。
-
totalBytes
number 可选
整个文件中的字节数(不考虑文件压缩),如果未知,则为 -1。
-
totalBytesGreater
number 可选
将结果限制为
totalBytes大于给定整数的DownloadItem。 -
totalBytesLess
number 可选
将结果限制为
totalBytes小于给定整数的DownloadItem。 -
网址
字符串 可选
此下载在任何重定向之前发起的绝对网址。
-
urlRegex
字符串 可选
将结果限制为
url与给定正则表达式匹配的DownloadItem。
FilenameConflictAction
去重
为避免重复,filename 会更改为在文件扩展名前包含一个计数器。
覆盖
现有文件将被新文件覆盖。
提示
系统会向用户显示一个文件选择器对话框。
枚举
"uniquify"
"overwrite"
"prompt"
FilenameSuggestion
属性
-
conflictAction
如果
filename已存在,则要执行的操作。 -
filename
字符串
DownloadItem的新目标DownloadItem.filename,作为相对于用户默认下载目录的路径,可能包含子目录。系统会忽略绝对路径、空路径以及包含反向引用“..”的路径。如果任何扩展程序注册了任何onDeterminingFilename监听器,系统会忽略filename。
GetFileIconOptions
属性
-
大小
number 可选
返回的图标的大小(以密度无关像素 [DIP] 为单位)。必须为 16 或 32(默认为 32)。在高 DPI 显示屏上,返回的图片会根据设备缩放比例进行缩放(例如,在 2 倍显示屏上,尺寸为 32 的图片会缩放为 64x64 像素)。来自后台 Service Worker 的调用默认采用 1 倍缩放比例。
HeaderNameValuePair
属性
-
name
字符串
HTTP 标头的名称。
-
值
字符串
HTTP 标头的值。
HttpMethod
枚举
"GET"
"POST"
InterruptReason
枚举
"FILE_FAILED"
"FILE_ACCESS_DENIED"
"FILE_NO_SPACE"
"FILE_NAME_TOO_LONG"
"FILE_TOO_LARGE"
"FILE_VIRUS_INFECTED"
"FILE_TRANSIENT_ERROR"
"FILE_BLOCKED"
"FILE_SECURITY_CHECK_FAILED"
"FILE_TOO_SHORT"
"FILE_HASH_MISMATCH"
"FILE_SAME_AS_SOURCE"
"NETWORK_FAILED"
"NETWORK_TIMEOUT"
"NETWORK_DISCONNECTED"
"NETWORK_SERVER_DOWN"
"NETWORK_INVALID_REQUEST"
"SERVER_FAILED"
"SERVER_NO_RANGE"
"SERVER_BAD_CONTENT"
"SERVER_UNAUTHORIZED"
"SERVER_CERT_PROBLEM"
"SERVER_FORBIDDEN"
"SERVER_UNREACHABLE"
"SERVER_CONTENT_LENGTH_MISMATCH"
"SERVER_CROSS_ORIGIN_REDIRECT"
"USER_CANCELED"
"USER_SHUTDOWN"
"CRASH"
State
in_progress
下载任务目前正在从服务器接收数据。
已中断
发生错误,导致与文件主机的连接中断。
complete
下载已成功完成。
枚举
"in_progress"
"interrupted"
"complete"
StringDelta
属性
-
当前
字符串 可选
-
上一页
字符串 可选
UiOptions
属性
-
已启用
布尔值
启用或停用下载界面。
方法
acceptDanger()
browser.downloads.acceptDanger(
downloadId: number,
): Promise<void>
提示用户接受危险下载。只能从可见上下文(标签页、窗口或页面/浏览器操作弹出式窗口)中调用。不会自动接受危险下载内容。如果下载被接受,则会触发 onChanged 事件,否则不会发生任何情况。当所有数据都提取到临时文件中,并且下载不危险或危险已被接受时,临时文件将重命名为目标文件名,state 更改为“complete”,并触发 onChanged。
参数
-
downloadId
数值
DownloadItem的标识符。
返回
-
承诺<void>
Chrome 96 及更高版本 browser.*(自 Chrome 148 起)返回一个 Promise,该 Promise 会在危险提示对话框关闭时解析。
cancel()
browser.downloads.cancel(
downloadId: number,
): Promise<void>
取消下载。运行 callback 时,下载已取消、已完成、已中断或已不存在。
参数
-
downloadId
数值
要取消的下载任务的 ID。
返回
-
承诺<void>
Chrome 96 及更高版本 browser.*(自 Chrome 148 起)返回一个 Promise,该 Promise 会在取消请求完成时解析。
download()
browser.downloads.download(
options: DownloadOptions,
): Promise<number>
下载网址。如果网址使用 HTTP[S] 协议,则请求将包含当前为其主机名设置的所有 Cookie。如果同时指定了 filename 和 saveAs,系统会显示“另存为”对话框,并预先填充指定的 filename。如果下载成功启动,系统会使用新 DownloadItem 的 downloadId 调用 callback。如果开始下载时出错,系统会使用 downloadId=undefined 调用 callback,并且 runtime.lastError 将包含描述性字符串。我们不保证错误字符串在不同版本之间保持向后兼容。扩展程序不得对其进行解析。
参数
-
下载内容和下载方式。
返回
-
<number>
Chrome 96 及更高版本 browser.*(自 Chrome 148 起)返回一个 Promise,该 Promise 会解析为新
DownloadItem的 ID。
erase()
browser.downloads.erase(
query: DownloadQuery,
): Promise<number[]>
从历史记录中清除匹配的 DownloadItem,而不删除下载的文件。系统会为与 query 匹配的每个 DownloadItem 触发一个 onErased 事件,然后调用 callback。
参数
返回
-
<number[]>
Chrome 96 及更高版本 browser.*(自 Chrome 148 起)
getFileIcon()
browser.downloads.getFileIcon(
downloadId: number,
options?: GetFileIconOptions,
): Promise<string | undefined>
检索指定下载内容的图标。对于新下载,文件图标会在下载的目标文件名确定后(例如,当 onChanged 触发且 filename 发生更改时)可用。如果在确定文件名之前尝试检索图标,则会通过 runtime.lastError 导致错误。此函数在下载过程中返回的图片可能与下载完成后返回的图片不同。图标检索是通过查询底层操作系统或工具包(具体取决于平台)来完成的。因此,返回的图标将取决于多种因素,包括下载状态、平台、注册的文件类型和视觉主题。如果无法确定文件图标,runtime.lastError 将包含一条出错提示。
参数
-
downloadId
数值
下载内容的标识符。
-
选项
返回
-
Promise<string | undefined>
Chrome 96 及更高版本 browser.*(自 Chrome 148 起)返回一个 Promise,该 Promise 会解析为指向代表下载内容的图片的网址。
open()
browser.downloads.open(
downloadId: number,
): Promise<void>
如果 DownloadItem 已完成,则立即打开下载的文件;否则通过 runtime.lastError 返回错误。除了 "downloads" 权限之外,此方法还需要 "downloads.open" 权限。当商品首次打开时,系统会触发 onChanged 事件。此方法只能在响应用户手势时调用。
参数
-
downloadId
数值
已下载文件的标识符。
返回
-
承诺<void>
Chrome 123 及更高版本 browser.*(自 Chrome 148 起)
pause()
browser.downloads.pause(
downloadId: number,
): Promise<void>
暂停下载。如果请求成功,下载将处于暂停状态。否则,runtime.lastError 会包含出错提示。如果下载未处于活动状态,请求将会失败。
参数
-
downloadId
数值
要暂停的下载任务的 ID。
返回
-
承诺<void>
Chrome 96 及更高版本 browser.*(自 Chrome 148 起)返回一个 Promise,该 Promise 会在暂停请求完成时解析。
removeFile()
browser.downloads.removeFile(
downloadId: number,
): Promise<void>
如果下载的文件存在且 DownloadItem 已完成,则移除该文件;否则通过 runtime.lastError 返回错误。
参数
-
downloadId
数值
返回
-
承诺<void>
Chrome 96 及更高版本 browser.*(自 Chrome 148 起)
resume()
browser.downloads.resume(
downloadId: number,
): Promise<void>
继续已暂停的下载。如果请求成功,则下载正在进行中且未暂停。否则,runtime.lastError 会包含出错提示。如果下载未处于活动状态,请求将会失败。
参数
-
downloadId
数值
要继续下载的下载任务的 ID。
返回
-
承诺<void>
Chrome 96 及更高版本 browser.*(自 Chrome 148 起)返回一个 Promise,该 Promise 会在恢复请求完成时解析。
search()
browser.downloads.search(
query: DownloadQuery,
): Promise<DownloadItem[]>
找到 DownloadItem。将 query 设置为空对象,以获取所有 DownloadItem。如需获取特定 DownloadItem,请仅设置 id 字段。如需对大量内容进行分页,请设置 orderBy: ['-startTime'],将 limit 设置为每页的内容数量,并将 startedAfter 设置为上一页中最后一项内容的 startTime。
参数
返回
-
<DownloadItem[]>
Chrome 96 及更高版本 browser.*(自 Chrome 148 起)
setShelfEnabled()
browser.downloads.setShelfEnabled(
enabled: boolean,
): void
请改用 setUiOptions。
启用或停用与当前浏览器个人资料关联的每个窗口底部的灰色书架。只要至少有一个扩展程序停用了该书架,该书架就会被停用。如果至少有一个其他扩展程序已停用书架,则启用书架会通过 runtime.lastError 返回错误。除了 "downloads" 权限之外,还需要 "downloads.shelf" 权限。
参数
-
已启用
布尔值
setUiOptions()
browser.downloads.setUiOptions(
options: UiOptions,
): Promise<void>
更改与当前浏览器配置文件关联的每个窗口的下载界面。只要至少有一个扩展程序将 UiOptions.enabled 设置为 false,下载界面就会隐藏。如果至少有一个其他扩展程序已停用 UiOptions.enabled,则将其设置为 true 会通过 runtime.lastError 返回错误。除了 "downloads" 权限之外,还需要 "downloads.ui" 权限。
参数
-
选项
封装对下载界面的更改。
返回
-
承诺<void>
返回一个在界面更新完成后解析的 Promise。
show()
browser.downloads.show(
downloadId: number,
): void
在文件管理器中显示已下载文件所在的文件夹。
参数
-
downloadId
数值
已下载文件的标识符。
showDefaultFolder()
browser.downloads.showDefaultFolder(): void
在文件管理器中显示默认的“下载内容”文件夹。
事件
onChanged
browser.downloads.onChanged.addListener(
callback: function,
)
当 DownloadItem 的任何属性(bytesReceived 和 estimatedEndTime 除外)发生更改时,系统会触发此事件,并返回 downloadId 以及包含已更改属性的对象。
参数
-
callback
函数
callback参数如下所示:(downloadDelta: DownloadDelta) => void
-
downloadDelta
-
onCreated
browser.downloads.onCreated.addListener(
callback: function,
)
此事件会在下载开始时与 DownloadItem 对象一起触发。
参数
-
callback
函数
callback参数如下所示:(downloadItem: DownloadItem) => void
-
downloadItem
-
onDeterminingFilename
browser.downloads.onDeterminingFilename.addListener(
callback: function,
)
在文件名确定过程中,扩展程序将有机会覆盖目标 DownloadItem.filename。每个扩展程序最多只能为此事件注册一个监听器。每个监听器都必须以同步或异步方式调用 suggest 正好一次。如果监听器异步调用 suggest,则必须返回 true。如果监听器既不以同步方式调用 suggest,也不返回 true,则系统会自动调用 suggest。在所有监听器都调用 suggest 之前,DownloadItem 不会完成。监听器可以调用不带任何参数的 suggest,以允许下载操作使用 downloadItem.filename 作为其文件名,也可以将 suggestion 对象传递给 suggest,以替换目标文件名。如果多个扩展程序替换了文件名,则最后安装的扩展程序(其监听器将 suggestion 对象传递给 suggest)会胜出。为避免混淆哪个扩展程序会生效,用户不应安装可能发生冲突的扩展程序。如果下载是由 download 发起的,并且在确定 MIME 类型和暂定文件名之前已知目标文件名,请改为将 filename 传递给 download。
参数
-
callback
函数
callback参数如下所示:(downloadItem: DownloadItem, suggest: function) => void
-
downloadItem
-
suggest
函数
suggest参数如下所示:(suggestion?: FilenameSuggestion) => void
-
建议
-
-
onErased
browser.downloads.onErased.addListener(
callback: function,
)
当从历史记录中清除下载内容时,会触发 downloadId。
参数
-
callback
函数
callback参数如下所示:(downloadId: number) => void
-
downloadId
数值
-