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" ,
"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" ,
"content" ,
"uncommon" ,
"host" ,
"unwanted" ,
"safe" ,
or "accepted"
|
State
枚举 |
---|
"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 的构造函数: |
string | (可选) endTime |
下载结束的时间,以 ISO 8601 格式表示,可以直接传递给 Date 的构造函数: |
string | (可选) estimatedEndTime |
下载项完成的估计时间,以 ISO 8601 格式表示,可以直接传递给 Date 的构造函数: |
State | state |
表示下载项处于正在进行、已中断还是已完成的状态。 |
boolean | paused |
如果下载项已停止从主机读取数据,但是连接仍然保持打开状态则为 true。 |
boolean | canResume |
如果下载项还在进行中并且已暂停,或者如果中断了但是可以从中断的位置恢复则为 true。 |
InterruptReason | (可选) error |
下载项中断的原因。各种 HTTP 错误可能会归为以 |
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。如果同时指定了 filename
与 saveAs
属性,则会显示另存为对话框,并且初始文件名为指定的 filename
。如果下载成功开始,将调用 callback
,并传递新的 DownloadItem(下载项目)的 downloadId
。如果开始下载时发生了错误,将调用 callback
,并传递 downloadId: undefined
,并且 runtime.lastError 包含描述性文字。错误字符串并不能保证在不同版本之间保持向后的兼容性,扩展程序决不能分析它。
参数 | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
object | options |
下载的内容与方式。
|
|||||||||||||||||||||||||||
function | (可选) callback |
调用时传递新的 DownloadItem 的标识符。 如果您指定了 callback 参数,它应该是一个如下形式的函数: function(integer downloadId) {...};
|
search
chrome.downloads.search(object query, function callback)
寻找 DownloadItem(下载项)。将 query
设置为空对象可以获取所有下载项。要获得某个特定的下载项,只要设置 id
字段。要为大量项目分页,请设置 orderBy: ['-startTime']
,将 limit
设置为每一页的项目数目,并将 startedAfter
设置为上一页最后一个项目的 startTime
属性。
参数 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
object | query |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function | callback |
callback 参数应该是一个如下形式的函数: function(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 |
|
|||
function | callback |
调用时传递代表下载项的图标。 callback 参数应该是一个如下形式的函数: function(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 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function | (可选) callback |
如果您指定了 callback 参数,它应该是一个如下形式的函数: function(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) {...};
|
onErased
当下载项从历史记录中删除时产生,并传递 downloadId
。
addListener
chrome.downloads.onErased.addListener(function callback)
参数 | |||||
---|---|---|---|---|---|
function | callback |
callback 参数应该是一个如下形式的函数: function(integer downloadId) {...};
|
onChanged
除 bytesReceived
和 estimatedEndTime
以外,当某个 DownloadItem(下载项)的任何属性更改时,会产生该事件,并传递 downloadId
以及描述属性更改的对象。
addListener
chrome.downloads.onChanged.addListener(function callback)
参数 | |||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
function | callback |
callback 参数应该是一个如下形式的函数: function(object downloadDelta) {...};
|
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) {...};
|
示例扩展程序
- Download Filename Controller – Download Filename Controller
- Download Selected Links – Select links on a page and download them.
- Download Manager Button – Browser Action Download Manager User Interface for Google Chrome
- Download and Open Button – Download and Open Context Menu Button
- Downloads Overwrite Existing Files – All downloads overwrite existing files instead of adding ' (1)', ' (2)', etc.