chrome.downloads

说明

使用 chrome.downloads API 以编程方式启动、监控、操纵和搜索下载内容。

权限

downloads

您必须在扩展程序清单中声明 "downloads" 权限,才能使用此 API。

{
  "name": "My extension",
  ...
  "permissions": [
    "downloads"
  ],
}

示例

您可以在 examples/api/downloads 目录中找到使用 chrome.downloads API 的简单示例。如需查看其他示例以及在查看源代码方面获得帮助,请参阅示例

类型

BooleanDelta

属性

  • 当前

    布尔值 选填

  • 返回

    布尔值 选填

DangerType

文件

下载内容的文件名可疑。

网址

下载内容的网址是已知的。

内容

下载的文件是已知恶意文件。

不常见

下载内容的网址不常被下载,可能具有危险性。

主办方

下载内容来自已知会传播恶意二进制文件的主机,很可能存在危险。

不受欢迎

下载内容可能不合适或不安全。例如,它可能会更改浏览器或计算机设置。

安全

下载内容不会给用户计算机带来任��已知危险。

已接受

用户已接受危险的下载内容。

枚举

"file"

"url"

"host"

"safe"

"accepted"

"allowlistedByPolicy"

"asyncScanning"

"asyncLocalPasswordScanning"

"blockedTooLarge"

"sensitiveContentWarning"

"sensitiveContentBlock"

"deepScannedSafe"

"deepScannedOpenedDangerous"

"promptForScanning"

"promptForLocalPasswordScanning"

"blockedScanFailed"

DoubleDelta

属性

  • 当前

    数字可选

  • 返回

    数字可选

DownloadDelta

属性

  • canResume

    BooleanDelta(可选)

    canResume 中的更改(如果有)。

  • 危险

    StringDelta(可选)

    danger 中的更改(如果有)。

  • endTime

    StringDelta(可选)

    endTime 中的更改(如果有)。

  • error

    StringDelta(可选)

    error 中的更改(如果有)。

  • 存在

    BooleanDelta(可选)

    exists 中的更改(如果有)。

  • fileSize

    DoubleDelta(可选)

    fileSize 中的更改(如果有)。

  • filename

    StringDelta(可选)

    filename 中的更改(如果有)。

  • finalUrl

    StringDelta(可选)

    Chrome 54 及更高版本

    finalUrl 中的更改(如果有)。

  • id

    number

    发生更改的 DownloadItemid

  • 哑剧

    StringDelta(可选)

    mime 中的更改(如果有)。

  • 已暂停

    BooleanDelta(可选)

    paused 中的更改(如果有)。

  • startTime

    StringDelta(可选)

    startTime 中的更改(如果有)。

  • state

    StringDelta(可选)

    state 中的更改(如果有)。

  • totalBytes

    DoubleDelta(可选)

    totalBytes 中的更改(如果有)。

  • 网址

    StringDelta(可选)

    url 中的更改(如果有)。

DownloadItem

属性

  • byExtensionId

    字符串(可选)

    启动此下载的扩展程序的标识符(如果此下载是由扩展程序启动的)。设置后不会更改。

  • byExtensionName

    字符串(可选)

    启动此下载的扩展程序的本地化名称(如果此下载是由扩展程序启动的)。如果扩展程序更改了名称或用户更改了语言区域,则可能会更改。

  • bytesReceived

    number

    到目前为止从主机接收的字节数(不考虑文件压缩)。

  • canResume

    boolean

    如果下载正在进行且已暂停,或者下载中断,可以从中断的地方恢复,则为 true。

  • 危险

    指明此下载内容是否安全或已知可疑。

  • endTime

    字符串(可选)

    下载结束的时间(ISO 8601 格式)。可以直接传递给 Date 构造函数:chrome.downloads.search({}, function(items){items.forEach(function(item){if (item.endTime) console.log(new Date(item.endTime))})})

  • error

    InterruptReason(可选)

    下载中断的原因。有多种 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))})})

  • 存在

    boolean

    已下载的文件是否仍然存在。此信息可能已过时,因为 Chrome 不会自动监测文件移除情况。调用 search() 以触发检查文件是否存在。完成存在性检查后,如果相应文件已被删除,则会触发 onChanged 事件。请注意,search() 不会等待存在性检查完成再返回,因此 search() 的结果可能无法准确反映文件系统。此外,可以根据需要随时调用 search(),但检查文件是否存在的频率不会超过每 10 秒一次。

  • fileSize

    number

    整个文件解压缩后的字节数,如果未知,则为 -1。

  • filename

    string

    绝对本地路径。

  • finalUrl

    string

    Chrome 54 及更高版本

    进行此下载时使用的绝对网址(经过所有重定向之后)。

  • id

    number

    一种跨浏览器会话永久的标识符。

  • 无痕模式

    boolean

    如果此下载记录在历史记录中,则为 false;如果未记录,则为 true。

  • 哑剧

    string

    文件的 MIME 类型。

  • 已暂停

    boolean

    如果下载已停止从主机读取数据,但连接保持打开状态,则为 true。

  • referrer

    string

    绝对网址。

  • startTime

    string

    开始下载的时间(ISO 8601 格式)。可以直接传递给 Date 构造函数:chrome.downloads.search({}, function(items){items.forEach(function(item){console.log(new Date(item.startTime))})})

  • state

    指明下载是正在进行、中断还是已完成。

  • totalBytes

    number

    整个文件中的字节数(不考虑文件压缩),如果未知,则为 -1。

  • 网址

    string

    发起下载时所在的绝对网址(在进行任何重定向之前)。

DownloadOptions

属性

  • body

    字符串(可选)

    帖子正文。

  • conflictAction

    filename 已存在时要执行的操作。

  • filename

    字符串(可选)

    相对于“下载内容”目录的文件路径,用于包含所下载的文件,其中可能包含子目录。绝对路径、空路径以及包含反向引用“..”的路径都将引发错误。onDeterminingFilename 允许在确定文件的 MIME 类型和暂定文件名后建议文件名。

  • headers

    如果网址使用 HTTP[s] 协议,则随请求发送的额外 HTTP 标头。每个标头都表示为一个字典,其中包含 namevaluebinaryValue 键,并且仅限于 XMLHttpRequest 允许使用键。

  • method

    HttpMethod 可选

    在网址使用 HTTP[S] 协议时使用的 HTTP 方法。

  • saveAs

    布尔值 选填

    使用文件选择器允许用户选择文件名,而不管 filename 是否已设置或已存在。

  • 网址

    string

    要下载的网址。

DownloadQuery

属性

  • bytesReceived

    数字可选

    到目前为止从主机接收的字节数(不考虑文件压缩)。

  • 危险

    DangerType 可选

    指明此下载内容是否安全或已知可疑。

  • endTime

    字符串(可选)

    下载结束的时间(ISO 8601 格式)。

  • endedAfter

    字符串(可选)

    将结果限制为在给定毫秒数后结束的 DownloadItem,采用 ISO 8601 格式

  • endedBefore

    字符串(可选)

    将结果限制为在指定毫秒之前结束的 DownloadItem,采用 ISO 8601 格式。

  • error

    InterruptReason(可选)

    下载中断的原因。

  • 存在

    布尔值 选填

    已下载的文件是否存在;

  • fileSize

    数字可选

    整个文件解压缩后的字节数,如果未知,则为 -1。

  • filename

    字符串(可选)

    绝对本地路径。

  • filenameRegex

    字符串(可选)

    将结果限制为其 filename 与指定正则表达式匹配的 DownloadItem

  • finalUrl

    字符串(可选)

    Chrome 54 及更高版本

    进行此下载时使用的绝对网址(经过所有重定向之后)。

  • finalUrlRegex

    字符串(可选)

    Chrome 54 及更高版本

    将结果限制为其 finalUrl 与指定正则表达式匹配的 DownloadItem

  • id

    数字可选

    要查询的 DownloadItemid

  • 限制

    数字可选

    返回的最大匹配 DownloadItem 数量。默认值为 1,000。设置为 0 可返回所有匹配的 DownloadItem。如需了解如何对结果进行分页,请参阅 search

  • 哑剧

    字符串(可选)

    文件的 MIME 类型。

  • orderBy

    string[] 可选

    将此数组的元素设置为 DownloadItem 属性,以便对搜索结果进行排序。例如,如果设置 orderBy=['startTime'],系统会按开始时间对 DownloadItem 进行升序排序。如需指定降序,请在前面加上连字符:'-startTime'。

  • 已暂停

    布尔值 选填

    如果下载已停止从主机读取数据,但连接保持打开状态,则为 true。

  • 个查询

    string[] 可选

    此搜索字词数组将结果限制为 DownloadItem,其 filenameurlfinalUrl 包含不以短划线“-”开头的所有搜索字词,并且不包含以短划线开头的搜索字词。

  • startTime

    字符串(可选)

    开始下载的时间(ISO 8601 格式)。

  • startedAfter

    字符串(可选)

    将结果限制为在给定毫秒数之后开始的 DownloadItem,采用 ISO 8601 格式。

  • startedBefore

    字符串(可选)

    将结果限制为在指定毫秒之前开始的 DownloadItem,采用 ISO 8601 格式。

  • state

    状态(可选)

    指明下载是正在进行、中断还是已完成。

  • totalBytes

    数字可选

    整个文件中的字节数(不考虑文件压缩),如果未知,则为 -1。

  • totalBytesGreater

    数字可选

    将结果限制为 totalBytes 大于给定整数的 DownloadItem

  • totalBytesLess

    数字可选

    将结果限制为 totalBytes 小于指定整数的 DownloadItem

  • 网址

    字符串(可选)

    发起下载时所在的绝对网址(在进行任何重定向之前)。

  • urlRegex

    字符串(可选)

    将结果限制为其 url 与指定正则表达式匹配的 DownloadItem

FilenameConflictAction

统一

为避免重复,更改 filename 以在文件扩展名前添加计数器。

改写

新文件会覆盖现有文件。

提示

系统会显示一个文件选择器对话框来提示用户。

枚举

"uniquify"

FilenameSuggestion

属性

  • conflictAction

    filename 已存在时要执行的操作。

  • filename

    string

    DownloadItem的新目标 DownloadItem.filename,作为相对于用户默认“Downloads”目录的路径,可能包含子目录。绝对路径、空路径以及包含反向引用“..”的路径将被忽略。如果有任何扩展程序注册了任何 onDeterminingFilename 监听器,filename 会被忽略。

GetFileIconOptions

属性

  • 大小

     可选

    返回的图标的大小。该图标将为方形,尺寸为 * 尺寸(像素)。此图标的默认尺寸和最大尺寸为 32x32 像素。仅支持的尺寸为 16 和 32。指定任何其他尺寸会导致出错。

HeaderNameValuePair

属性

  • name

    string

    HTTP 标头的名称。

  • string

    HTTP 标头的值。

HttpMethod

枚举

InterruptReason

枚举

"FILE_TOO_LARGE"

"FILE_VIRUS_INFECTED"

"FILE_HASH_MISMATCH"

State

in_progress

下载内容目前正在从服务器接收数据。

已中断

错误中断了与文件主机的连接。

complete

下载已成功完成。

枚举

"in_progress"

StringDelta

属性

  • 当前

    字符串(可选)

  • 返回

    字符串(可选)

UiOptions

Chrome 105 及更高版本

属性

  • 已启用

    boolean

    启用或停用下载界面。

方法

acceptDanger()

Promise
chrome.downloads.acceptDanger(
  downloadId: number,
  callback?: function,
)

提示用户接受危险的下载内容。只能从可见上下文(标签页、窗口或页面/浏览器操作弹出式窗口)中调用。不自动接受危险下载内容。如果下载被接受,则会触发 onChanged 事件,否则不会执行任何操作。当所有数据都被提取到临时文件中,并且下载内容不存在危险或危险已被接受后,临时文件将重命名为目标文件名,state 会更改为“complete”,并且 onChanged 会触发。

参数

  • downloadId

    number

    DownloadItem 的标识符。

  • callback

    函数(可选)

    callback 参数如下所示:

    () => void

返回

  • Promise<void>

    Chrome 96 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

cancel()

Promise
chrome.downloads.cancel(
  downloadId: number,
  callback?: function,
)

取消下载。当 callback 运行时,下载会被取消、已完成、中断或不再存在。

参数

  • downloadId

    number

    要取消的下载的 ID。

  • callback

    函数(可选)

    callback 参数如下所示:

    () => void

返回

  • Promise<void>

    Chrome 96 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

download()

Promise
chrome.downloads.download(
  options: DownloadOptions,
  callback?: function,
)

下载网址。如果网址使用 HTTP[S] 协议,则请求将包含当前为其主机名设置的所有 Cookie。如果同时指定了 filenamesaveAs,系统会显示“另存为”对话框,其中预先填充了指定的 filename。如果下载成功开始,系统将使用新的 DownloadItemdownloadId 调用 callback。如果开始下载时出错,系统将使用 downloadId=undefined 调用 callback,并且 runtime.lastError 将包含描述性字符串。不保证错误字符串在不同版本之间保持向后兼容性。扩展程序不得对其进行解析。

参数

  • 下载内容和操作方法。

  • callback

    函数(可选)

    callback 参数如下所示:

    (downloadId: number) => void

    • downloadId

      number

返回

  • Promise<数字>

    Chrome 96 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

erase()

Promise
chrome.downloads.erase(
  query: DownloadQuery,
  callback?: function,
)

将匹配的DownloadItem从历史记录中清除,但不删除已下载的文件。对于每个与 query 匹配的 DownloadItem,会触发 onErased 事件,然后调用 callback

参数

  • 个查询
  • callback

    函数(可选)

    callback 参数如下所示:

    (erasedIds: number[]) => void

    • erasedIds

      数值 []

返回

  • Promise<number[]>

    Chrome 96 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

getFileIcon()

Promise
chrome.downloads.getFileIcon(
  downloadId: number,
  options?: GetFileIconOptions,
  callback?: function,
)

检索指定下载的图标。对于新的下载内容,我们会在收到 onCreated 事件后提供文件图标。下载过程中此函数返回的图片可能与下载完成后返回的图片不同。图标检索通过查询底层操作系统或工具包完成,具体取决于平台。因此,返回的图标取决于多种因素,包括下载状态、平台、注册的文件类型以及视觉主题。如果无法确定文件图标,runtime.lastError 将包含错误消息。

参数

  • downloadId

    number

    下载内容的标识符。

  • 选项
  • callback

    函数(可选)

    callback 参数如下所示:

    (iconURL?: string) => void

    • iconURL

      字符串(可选)

返回

  • Promise<string | undefined>

    Chrome 96 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

open()

Promise
chrome.downloads.open(
  downloadId: number,
  callback?: function,
)

DownloadItem 完成后立即打开下载的文件;否则通过 runtime.lastError 返回错误。除了 "downloads" 权限外,此方法还需要 "downloads.open" 权限。onChanged 事件会在内容首次打开时触发。此方法只能在响应用户手势时调用。

参数

  • downloadId

    number

    已下载文件的标识符。

  • callback

    函数(可选)

    Chrome 123 及更高版本

    callback 参数如下所示:

    () => void

返回

  • Promise<void>

    Chrome 123 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

pause()

Promise
chrome.downloads.pause(
  downloadId: number,
  callback?: function,
)

暂停下载。如果请求成功,下载会处于暂停状态。否则,runtime.lastError 包含错误消息。如果下载无效,请求将失败。

参数

  • downloadId

    number

    要暂停的下载的 ID。

  • callback

    函数(可选)

    callback 参数如下所示:

    () => void

返回

  • Promise<void>

    Chrome 96 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

removeFile()

Promise
chrome.downloads.removeFile(
  downloadId: number,
  callback?: function,
)

移除已下载的文件(若该文件存在且 DownloadItem 已完成);否则通过 runtime.lastError 返回错误。

参数

  • downloadId

    number

  • callback

    函数(可选)

    callback 参数如下所示:

    () => void

返回

  • Promise<void>

    Chrome 96 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

resume()

Promise
chrome.downloads.resume(
  downloadId: number,
  callback?: function,
)

恢复已暂停的下载。如果请求成功,则下载正在进行并解除暂停。否则,runtime.lastError 包含错误消息。如果下载无效,请求将失败。

参数

  • downloadId

    number

    要恢复的下载的 ID。

  • callback

    函数(可选)

    callback 参数如下所示:

    () => void

返回

  • Promise<void>

    Chrome 96 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

Promise
chrome.downloads.search(
  query: DownloadQuery,
  callback?: function,
)

找到 DownloadItem。将 query 设置为空对象,以获取所有 DownloadItem。如需获取特定的 DownloadItem,请仅设置 id 字段。如需对大量项进行分页,请设置 orderBy: ['-startTime'],将 limit 设置为每页的项数,并将 startedAfter 设置为最后一页中最后一项的 startTime

参数

返回

  • Promise<DownloadItem[]>

    Chrome 96 及更高版本

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

setShelfEnabled()

从 Chrome 117 开始已废弃
chrome.downloads.setShelfEnabled(
  enabled: boolean,
)

请改用 setUiOptions

在与当前浏览器配置文件相关联的每个窗口底部,启用或停用灰色任务栏。只要至少有一个扩展程序将其停用,该搁架就会被停用。如果在至少另外一个扩展程序已停用的情况下启用任务栏,则会通过 runtime.lastError 返回错误。除了 "downloads" 权限之外,还需要 "downloads.shelf" 权限。

参数

  • 已启用

    boolean

setUiOptions()

Promise Chrome 105 及更高版本
chrome.downloads.setUiOptions(
  options: UiOptions,
  callback?: function,
)

更改与当前浏览器配置文件相关联的每个窗口的下载界面。只要至少有一个扩展程序将 UiOptions.enabled 设为 false,下载界面就会隐藏。在至少另外一个扩展程序已停用的情况下,如果将 UiOptions.enabled 设置为 true,则会通过 runtime.lastError 返回错误。除了 "downloads" 权限之外,还需要 "downloads.ui" 权限。

参数

  • 选项

    封装对下载界面的更改。

  • callback

    函数(可选)

    callback 参数如下所示:

    () => void

返回

  • Promise<void>

    Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。

show()

chrome.downloads.show(
  downloadId: number,
)

在文件管理器的相应文件夹中显示已下载的文件。

参数

  • downloadId

    number

    已下载文件的标识符。

showDefaultFolder()

chrome.downloads.showDefaultFolder()

在文件管理器中显示默认的“下载内容”文件夹。

活动

onChanged

chrome.downloads.onChanged.addListener(
  callback: function,
)

DownloadItem 的任何属性(bytesReceivedestimatedEndTime 除外)发生更改时,此事件会触发 downloadId,还会触发一个包含已更改属性的对象。

参数

onCreated

chrome.downloads.onCreated.addListener(
  callback: function,
)

下载开始时,此事件会通过 DownloadItem 对象触发。

参数

onDeterminingFilename

chrome.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

参数

onErased

chrome.downloads.onErased.addListener(
  callback: function,
)

当下载内容从历史记录中清除时,使用 downloadId 触发。

参数

  • callback

    功能

    callback 参数如下所示:

    (downloadId: number) => void

    • downloadId

      number