chrome.downloads

描述 使用 chrome.downloads API 以编程方式开始下载,监视、操纵、搜索下载的文件。
可用版本 从 Chrome 31 开始支持。
权限 "downloads"

清单文件

您必须在扩展程序的清单文件中声明 "downloads" 权限才能使用该 API。

      {
        "name": "我的扩展程序",
        ...
        "permissions": [
          "downloads"
        ],
        ...
      }
      

例子

您可以在 examples/api/downloads 目录中找到使用 chrome.downloads API 的简单例子。有关其他例子以及查看源代码的帮助,请参见示例

摘要

类型
FilenameConflictAction
InterruptReason
DangerType
State
DownloadItem
StringDelta
DoubleDelta
BooleanDelta
方法
download chrome.downloads.download(object options, function callback)
search chrome.downloads.search(object query, function callback)
pause chrome.downloads.pause(integer downloadId, function callback)
resume chrome.downloads.resume(integer downloadId, function callback)
cancel chrome.downloads.cancel(integer downloadId, function callback)
getFileIcon chrome.downloads.getFileIcon(integer downloadId, object options, function callback)
open chrome.downloads.open(integer downloadId)
show chrome.downloads.show(integer downloadId)
showDefaultFolder chrome.downloads.showDefaultFolder()
erase chrome.downloads.erase(object query, function callback)
removeFile chrome.downloads.removeFile(integer downloadId, function callback)
acceptDanger chrome.downloads.acceptDanger(integer downloadId, function callback)
drag chrome.downloads.drag(integer downloadId)
setShelfEnabled chrome.downloads.setShelfEnabled(boolean enabled)
事件
onCreated
onErased
onChanged
onDeterminingFilename

类型

FilenameConflictAction

uniquify
为了避免重复,filename 可能会更改,在文件扩展名前包含一个计数器。
overwrite
现有文件会被新文件覆盖。
prompt
显示文件选择对话框提示用户。
枚举
"uniquify", "overwrite", or "prompt"

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", "NETWORK_FAILED", "NETWORK_TIMEOUT", "NETWORK_DISCONNECTED", "NETWORK_SERVER_DOWN", "NETWORK_INVALID_REQUEST", "SERVER_FAILED", "SERVER_NO_RANGE", "SERVER_PRECONDITION", "SERVER_BAD_CONTENT", "SERVER_UNAUTHORIZED", "SERVER_CERT_PROBLEM", "USER_CANCELED", "USER_SHUTDOWN", or "CRASH"

DangerType

file
下载项的文件名可疑。
url
下载项的 URL 已知是恶意的。
content
已下载的文件已知是恶意的。
uncommon
下载项的 URL 不常见,可能有风险。
host
下载项来自已知发布恶意软件的主机,可能有风险。
unwanted
下载项可能不是所需要的或者不安全,例如它可能会更改浏览器或计算机设置。
safe
下载项对用户的计算机没有已知风险。
accepted
用户已经接受了有风险的下载。
枚举
"file", "url", "content", "uncommon", "host", "unwanted", "safe", or "accepted"

State

in_progress
下载项当前正在从服务器接收数据。
interrupted
错误中断了与文件主机之间的连接。
complete
下载成功完成。
枚举
"in_progress", "interrupted", or "complete"

DownloadItem

属性
integer id

在不同浏览器会话间持久存在的标识符。

string url

绝对 URL。

string referrer

绝对 URL。

string filename

绝对本地路径。

boolean incognito

如果该下载项记录在历史记录中则为 false,没有记录则为 true。

DangerType danger

表示该下载项是否被识别为安全的或者已知是可疑的。

string mime

文件的 MIME 类型。

string startTime

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

string (可选)
endTime

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

string (可选)
estimatedEndTime

下载项完成的估计时间,以 ISO 8601 格式表示,可以直接传递给 Date 的构造函数:chrome.downloads.search({}, function(items){items.forEach(function(item){if (item.estimatedEndTime) console.log(new Date(item.estimatedEndTime))})})-->

State state

表示下载项处于正在进行、已中断还是已完成的状态。

boolean paused

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

boolean canResume

如果下载项还在进行中并且已暂停,或者如果中断了但是可以从中断的位置恢复则为 true。

InterruptReason (可选)
error

下载项中断的原因。各种 HTTP 错误可能会归为以 SERVER_ 开头的几种错误之一,与网络相关的错误以 NETWORK_ 开头,将文件写入文件系统的过程中发生的有关错误以 FILE_ 开头,由用户进行的中断由 USER_开头。

double bytesReceived

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

double totalBytes

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

double fileSize

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

boolean exists

下载的文件是否还存在,该信息可能不是最新的,因为 Chrome 浏览器不会自动检测文件的删除。要检查文件是否存在,请调用 search()。存在性检查完后,如果文件已删除,会产生 onChanged 事件。注意 search() 不会等到存在性检查完成后再返回,所以 search() 的结果不一定能准确地反映文件系统的情况。此外,尽管可以频繁调用 search(),但是检查文件存在性的频率不会高于每 10 秒一次。

string (可选)
byExtensionId

如果下载项由扩展程序发起,则为开始本次下载的扩展程序标识符,一旦设置后就不会更改。

string (可选)
byExtensionName

如果下载项由扩展程序发起,则为开始本次下载的扩展程序本地化名称,如果扩展程序的名称更改或者用户更改了区域设置则该属性也会更改。

StringDelta

属性
string (可选)
previous
string (可选)
current

DoubleDelta

从 Chrome 34 开始支持。

属性
double (可选)
previous
double (可选)
current

BooleanDelta

属性
boolean (可选)
previous
boolean (可选)
current

方法

download

chrome.downloads.download(object options, function callback)

下载某个 URL。如果该 URL 使用 HTTP[S] 协议,请求会包含当前为主机名设置的所有 Cookie。如果同时指定了 filenamesaveAs 属性,则会显示另存为对话框,并且初始文件名为指定的 filename。如果下载成功开始,将调用 callback,并传递新的 DownloadItem(下载项目)的 downloadId。如果开始下载时发生了错误,将调用 callback,并传递 downloadId: undefined,并且 runtime.lastError 包含描述性文字。错误字符串并不能保证在不同版本之间保持向后的兼容性,扩展程序决不能分析它。

参数
object options

下载的内容与方式。

string url

要下载的 URL。

string (可选)
filename

相对于下载文件夹的路径,包含下载得到的文件,可以包含子目录。绝对路径、空路径以及包含向前引用“..”的路径会导致错误。onDeterminingFilename 允许在文件 MIME 类型和待定文件名确定后推荐文件名。

FilenameConflictAction (可选)
conflictAction

filename 已经存在时进行的操作。

boolean (可选)
saveAs

使用选择文件对话框,允许用户选择文件名(无论 filename 是否设置或已经存在)。

enum of "GET", or "POST" (可选)
method

如果 URL 使用 HTTP[S] 协议,则为使用的 HTTP 方法。

array of object (可选)
headers

如果 URL 使用 HTTP[S] 协议,则包含要与请求一起发送的附加 HTTP 头信息。每一条头信息都由词典表示,包含键 name 以及 valuebinaryValue 中的某一个,仅限于 XMLHttpRequest 中允许的头信息。

每一个对象的属性

string name

HTTP 头信息的名称。

string value

HTTP 头信息的值。

string (可选)
body

POST 方法的正文。

function (可选)
callback

调用时传递新的 DownloadItem 的标识符。

如果您指定了 callback 参数,它应该是一个如下形式的函数:

function(integer downloadId) {...};
integer downloadId
chrome.downloads.search(object query, function callback)

寻找 DownloadItem(下载项)。将 query 设置为空对象可以获取所有下载项。要获得某个特定的下载项,只要设置 id 字段。要为大量项目分页,请设置 orderBy: ['-startTime'],将 limit 设置为每一页的项目数目,并将 startedAfter 设置为上一页最后一个项目的 startTime 属性。

参数
object query
array of string (可选)
query

这一搜索条目数组将结果限制为文件名(filename)或 URL 包含所有不以减号('-')开始的搜索条目并且不包含所有以减号('-')开始的搜索条目。

string (可选)
startedBefore

将结果限制为下载开始时间在给定时间(以 1970 年 1 月 1 日午夜以来所经过的毫秒数表示)之前的 DownloadItem

string (可选)
startedAfter

将结果限制为下载开始时间在给定时间(以 1970 年 1 月 1 日午夜以来所经过的毫秒数表示)之后的 DownloadItem

string (可选)
endedBefore

将结果限制为下载结束时间在给定时间(以 1970 年 1 月 1 日午夜以来所经过的毫秒数表示)之前的 DownloadItem

string (可选)
endedAfter

将结果限制为下载结束时间在给定时间(以 1970 年 1 月 1 日午夜以来所经过的毫秒数表示)之后的 DownloadItem

double (可选)
totalBytesGreater

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

double (可选)
totalBytesLess

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

string (可选)
filenameRegex

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

string (可选)
urlRegex

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

integer (可选)
limit

返回匹配 DownloadItem(下载项)的最大数目,默认为 1000,设置为 0 则返回所有匹配的 DownloadItem(下载项)。有关如何为结果分页,请参见 search

array of string (可选)
orderBy

将该数组的元素设置为 DownloadItem 的属性,为搜索结果排序。例如,设置 orderBy: ['startTime'] 将使下载项按开始时间升序排列。如果要降序排列,请在前面使用连字符:'-startTime'。

integer (可选)
id

要查询的 DownloadItem 的标识符。

string (可选)
url

绝对 URL。

string (可选)
filename

绝对本地路径。

DangerType (可选)
danger

表示该下载项是否被识别为安全的或者已知是可疑的。

string (可选)
mime

文件的 MIME 类型。

string (可选)
startTime

下载开始的时间,以 ISO 8601 格式表示。

string (可选)
endTime

下载结束的时间,以 ISO 8601 格式表示。

State (可选)
state

表示下载项处于正在进行、已中断还是已完成的状态。

boolean (可选)
paused

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

InterruptReason (可选)
error

下载项中断的原因。

double (可选)
bytesReceived

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

double (可选)
totalBytes

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

double (可选)
fileSize

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

boolean (可选)
exists

下载的文件是有存在。

function callback

callback 参数应该是一个如下形式的函数:

function(array of DownloadItem results) {...};
array of DownloadItem results

pause

chrome.downloads.pause(integer downloadId, function callback)

暂停下载。如果请求成功,下载项将进入暂停状态。否则,runtime.lastError 将包含错误消息。如果下载项不处于活动状态,该调用会失败。

参数
integer downloadId

要暂停的下载项标识符。

function (可选)
callback

暂停请求完成时调用。

如果您指定了 callback 参数,它应该是一个如下形式的函数:

function() {...};

resume

chrome.downloads.resume(integer downloadId, function callback)

恢复已暂停的下载。如果请求成功,下载项将继续进行,不再处于暂停状态。否则,runtime.lastError 将包含错误消息。如果下载项不处于活动状态,该调用会失败。

参数
integer downloadId

要恢复的下载项标识符。

function (可选)
callback

恢复请求完成后调用。

如果您指定了 callback 参数,它应该是一个如下形式的函数:

function() {...};

cancel

chrome.downloads.cancel(integer downloadId, function callback)

取消下载。回调函数运行时,下载已取消、已完成、已中断或者不再存在。

参数
integer downloadId

要取消的下载项标识符。

function (可选)
callback

取消请求完成后调用。

如果您指定了 callback 参数,它应该是一个如下形式的函数:

function() {...};

getFileIcon

chrome.downloads.getFileIcon(integer downloadId, object options, function callback)

获取指定下载项的图标。对于新的下载项,文件图标将在 onCreated 事件收到后才可用。在下载进行时该函数返回的图像可能与下载完成后返回的图像不同。获取图标的方式取决于平台,通过查询下层操作系统或工具包的方式进行。因此,返回的图标取决于各种因素,包括下载状态、平台、已注册的文件类型以及视觉主题。如果无法确定文件图标,runtime.lastError 将会包含错误消息。

参数
integer downloadId

下载项的标识符。

object (可选)
options
integer (可选)
size

返回图标的大小。返回图标的大小为 size×size 像素,图标的默认大小和最大大小都是 32×32 像素。支持的大小有 16 和 32,指定其他大小都会导致错误。

function callback

调用时传递代表下载项的图标。

callback 参数应该是一个如下形式的函数:

function(string iconURL) {...};
string (可选)
iconURL

open

chrome.downloads.open(integer downloadId)

如果 DownloadItem(下载项)已完成则立即打开下载的文件,否则通过 runtime.lastError 返回错误。该方法除了需要 "downloads" 权限外还需要 "downloads.open" 权限。项目第一次打开时将产生 onChanged 事件。

参数
integer downloadId

已下载文件的标识符。

show

chrome.downloads.show(integer downloadId)

在文件管理器中,打开已下载文件所在的文件夹并显示它。

参数
integer downloadId

已下载文件的标识符。

showDefaultFolder

chrome.downloads.showDefaultFolder()

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

erase

chrome.downloads.erase(object query, function callback)

从历史记录中删除匹配的 DownloadItem(下载项),但不会删除已下载的文件,匹配 query 的每一个 DownloadItem 都会产生一次 onErased 事件,然后调用 callback

参数
object query
array of string (可选)
query

这一搜索条目数组将结果限制为文件名(filename)或 URL 包含所有不以减号('-')开始的搜索条目并且不包含所有以减号('-')开始的搜索条目。

string (可选)
startedBefore

将结果限制为下载开始时间在给定时间(以 1970 年 1 月 1 日午夜以来所经过的毫秒数表示)之前的 DownloadItem

string (可选)
startedAfter

将结果限制为下载开始时间在给定时间(以 1970 年 1 月 1 日午夜以来所经过的毫秒数表示)之后的 DownloadItem

string (可选)
endedBefore

将结果限制为下载结束时间在给定时间(以 1970 年 1 月 1 日午夜以来所经过的毫秒数表示)之前的 DownloadItem

string (可选)
endedAfter

将结果限制为下载结束时间在给定时间(以 1970 年 1 月 1 日午夜以来所经过的毫秒数表示)之后的 DownloadItem

double (可选)
totalBytesGreater

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

double (可选)
totalBytesLess

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

string (可选)
filenameRegex

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

string (可选)
urlRegex

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

integer (可选)
limit

返回匹配 DownloadItem(下载项)的最大数目,默认为 1000,设置为 0 则返回所有匹配的 DownloadItem(下载项)。有关如何为结果分页,请参见 search

array of string (可选)
orderBy

将该数组的元素设置为 DownloadItem 的属性,为搜索结果排序。例如,设置 orderBy: ['startTime'] 将使下载项按开始时间升序排列。如果要降序排列,请在前面使用连字符:'-startTime'。

integer (可选)
id

要查询的 DownloadItem 的标识符。

string (可选)
url

绝对 URL。

string (可选)
filename

绝对本地路径。

DangerType (可选)
danger

表示该下载项是否被识别为安全的或者已知是可疑的。

string (可选)
mime

文件的 MIME 类型。

string (可选)
startTime

下载开始的时间,以 ISO 8601 格式表示。

string (可选)
endTime

下载结束的时间,以 ISO 8601 格式表示。

State (可选)
state

表示下载项处于正在进行、已中断还是已完成的状态。

boolean (可选)
paused

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

InterruptReason (可选)
error

下载项中断的原因。

double (可选)
bytesReceived

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

double (可选)
totalBytes

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

double (可选)
fileSize

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

boolean (可选)
exists

下载的文件是有存在。

function (可选)
callback

如果您指定了 callback 参数,它应该是一个如下形式的函数:

function(array of integer erasedIds) {...};
array of integer erasedIds

removeFile

chrome.downloads.removeFile(integer downloadId, function callback)

如果文件存在并且i DownloadItem(下载项)已完成,则删除已下载的文件,否则通过 runtime.lastError 返回错误。

参数
integer downloadId
function (可选)
callback

如果您指定了 callback 参数,它应该是一个如下形式的函数:

function() {...};

acceptDanger

chrome.downloads.acceptDanger(integer downloadId, function callback)

提示用户接受有风险的下载,不会自动接受有风险的下载。如果下载项被接受,将产生 onChanged 事件,否则什么都不会发生。当所有数据都获取至临时文件后,如果下载项没有风险或者已被接受,该临时文件将被重命名为目标文件名,state 更改为 'complete',并产生 onChanged 事件。

参数
integer downloadId

DownloadItem 的标识符。

function (可选)
callback

风险提示对话框关闭时调用。

如果您指定了 callback 参数,它应该是一个如下形式的函数:

function() {...};

drag

chrome.downloads.drag(integer downloadId)

开始将已下载的文件拖动到另一个应用程序,在 JavaScript 的 ondragstart 事件处理程序中调用。

参数
integer downloadId

setShelfEnabled

chrome.downloads.setShelfEnabled(boolean enabled)

启用或禁用窗口底部与当前浏览器的用户配置文件相关联的灰色下载框,只要有至少一个扩展程序禁用它则下载框就会被禁用,在其他扩展程序禁用下载框时启用它会导致错误,通过 runtime.lastError 返回。除了 "downloads" 权限以外还需要 "downloads.shelf" 权限。

参数
boolean enabled

事件

onCreated

下载开始时产生该事件,并传递 DownloadItem 对象。

addListener

chrome.downloads.onCreated.addListener(function callback)
参数
function callback

callback 参数应该是一个如下形式的函数:

function( DownloadItem downloadItem) {...};
DownloadItem downloadItem

onErased

当下载项从历史记录中删除时产生,并传递 downloadId

addListener

chrome.downloads.onErased.addListener(function callback)
参数
function callback

callback 参数应该是一个如下形式的函数:

function(integer downloadId) {...};
integer downloadId

已删除的 DownloadItemid

onChanged

bytesReceivedestimatedEndTime 以外,当某个 DownloadItem(下载项)的任何属性更改时,会产生该事件,并传递 downloadId 以及描述属性更改的对象。

addListener

chrome.downloads.onChanged.addListener(function callback)
参数
function callback

callback 参数应该是一个如下形式的函数:

function(object downloadDelta) {...};
object downloadDelta
integer id

更改的 DownloadItem 的标识符。

StringDelta (可选)
url

url 属性的更改(如果有的话)。

StringDelta (可选)
filename

filename 属性的更改(如果有的话)。

StringDelta (可选)
danger

danger 属性的更改(如果有的话)。

StringDelta (可选)
mime

mime 属性的更改(如果有的话)。

StringDelta (可选)
startTime

startTime 属性的更改(如果有的话)。

StringDelta (可选)
endTime

endTime 属性的更改(如果有的话)。

StringDelta (可选)
state

state 属性的更改(如果有的话)。

BooleanDelta (可选)
canResume

canResume 属性的更改(如果有的话)。

BooleanDelta (可选)
paused

pause 属性的更改(如果有的话)。

StringDelta (可选)
error

error 属性的更改(如果有的话)。

DoubleDelta (可选)
totalBytes

totalBytes 属性的更改(如果有的话)。

DoubleDelta (可选)
fileSize

fileSize 属性的更改(如果有的话)。

BooleanDelta (可选)
exists

exists 属性的更改(如果有的话)。

onDeterminingFilename

在确定文件名的过程中,扩展程序有机会修改目标 DownloadItem.filename(文件名)。每一个扩展程序不能为该事件注册一个以上的监听器,每个监听器必须恰好调用一次 suggest,既可以是同步地,也可以是异步地。如果监听器异步地调用 suggest,它必须返回 true。如果监听器既没有同步地调用 suggest,也没有返回 true,则会自动调用 suggest。在所有监听器调用 suggest 前,DownloadItem(下载项)不会完成。监听器应该不传递任何参数调用 suggest,允许下载项使用 downloadItem.filename 作为它的文件名,或者向 suggest 传递一个 suggestion 对象,修改目标文件名。如果不止一个扩展程序修改文件名,最后安装并且向 suggest 传递 suggestion 对象的扩展程序优先。为了避免哪个扩展程序优先造成的混淆,用户不应该安装可能会导致冲突的扩展程序。如果下载由 download 发起,并且在 MIME 类型和待定文件名确定前就指定了文件名,请将 filename 传递给 download

addListener

chrome.downloads.onDeterminingFilename.addListener(function callback)
参数
function callback

callback 参数应该是一个如下形式的函数:

function( DownloadItem downloadItem, function suggest) {...};
DownloadItem downloadItem
function suggest

suggest 参数应该是一个如下形式的函数:

function(object suggestion) {...};
object (可选)
suggestion
string filename

DownloadItem(下载项)新的目标 DownloadItem.filename(文件名),以相对于用户默认下载目录的路径表示,可以包含子目录。绝对路径、空路径以及包含父目录引用“..”的路径将被忽略。

FilenameConflictAction (可选)
conflictAction

如果 filename 已存在的话要采取的行动。

示例扩展程序