该页面翻译自 Google Chrome Extensions 与 Google Chrome Apps。除非特别说明,该页面的内容遵循 Creative Commons Attribution 3.0 License,代码示例遵循 BSD License。
描述: |
使用 chrome.downloads API 以编程方式开始下载,监视、操纵、搜索下载的文件。
|
可用版本: |
从 Chrome 31 开始稳定支持。
|
权限: |
"downloads"
|
您必须在扩展程序的清单文件中声明 "downloads" 权限才能使用该 API。
{ "name": "我的扩展程序", ... "permissions": [ "downloads" ], ... }
您可以在 examples/api/downloads
目录中找到使用 chrome.downloads
API
的简单例子。有关其他例子以及查看源代码的帮助,请参见示例。
"uniquify"
,
"overwrite"
,
or "prompt"
filename
可能会更改,在文件扩展名前包含一个计数器。"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"
,
"SERVER_FAILED"
,
"SERVER_NO_RANGE"
,
"SERVER_PRECONDITION"
,
"SERVER_BAD_CONTENT"
,
"USER_CANCELED"
,
"USER_SHUTDOWN"
,
or "CRASH"
"file"
,
"url"
,
"content"
,
"uncommon"
,
"host"
,
"unwanted"
,
"safe"
,
or "accepted"
"in_progress"
,
"interrupted"
,
or "complete"
chrome.downloads.search({}, function(items){items.forEach(function(item){console.log(new Date(item.startTime))})})
。
chrome.downloads.search({}, function(items){items.forEach(function(item){console.log(new Date(item.endTime))})})
。
chrome.downloads.search({}, function(items){items.forEach(function(item){if (item.estimatedEndTime) console.log(new Date(item.estimatedEndTime))})})
-->
SERVER_
开头的几种错误之一,与网络相关的错误以 NETWORK_
开头,将文件写入文件系统的过程中发生的有关错误以 FILE_
开头,由用户进行的中断由 USER_
开头。
参数
filename
已经存在时进行的操作。
如果您指定了 callback 参数,它应该指定一个如下形式的函数:
function(integer downloadId) {...};
寻找 DownloadItem(下载项)。将 query
设置为空对象可以获取所有下载项。要获得某个特定的下载项,只要设置 id
字段。要为大量项目分页,请设置 orderBy: ['-startTime']
,将 limit
设置为每一页的项目数目,并将 startedAfter
设置为上一页最后一个项目的 startTime
属性。
filename
)或 URL 包含所有不以减号('-')开始的搜索条目并且不包含所有以减号('-')开始的搜索条目。
totalBytes
大于指定整数的 DownloadItem。
totalBytes
小于指定整数的 DownloadItem。
filename
匹配指定正则表达式的 DownloadItem。
url
匹配指定正则表达式的 DownloadItem。
orderBy: ['startTime']
将使下载项按开始时间升序排列。如果要降序排列,请在前面使用连字符:'-startTime'。
callback 参数应该指定一个如下形式的函数:
function(array of DownloadItem results) {...};
暂停下载。如果请求成功,下载项将进入暂停状态。否则,runtime.lastError 将包含错误消息。如果下载项不处于活动状态,该调用会失败。
如果您指定了 callback 参数,它应该指定一个如下形式的函数:
function() {...};
恢复已暂停的下载。如果请求成功,下载项将继续进行,不再处于暂停状态。否则,runtime.lastError 将包含错误消息。如果下载项不处于活动状态,该调用会失败。
如果您指定了 callback 参数,它应该指定一个如下形式的函数:
function() {...};
获取指定下载项的图标。对于新的下载项,文件图标将在 onCreated 事件收到后才可用。在下载进行时该函数返回的图像可能与下载完成后返回的图像不同。获取图标的方式取决于平台,通过查询下层操作系统或工具包的方式进行。因此,返回的图标取决于各种因素,包括下载状态、平台、已注册的文件类型以及视觉主题。如果无法确定文件图标,runtime.lastError 将会包含错误消息。
callback 参数应该指定一个如下形式的函数:
function(string iconURL) {...};
如果 DownloadItem(下载项)已完成则立即打开下载的文件,否则通过 runtime.lastError 返回错误。该方法除了需要 "downloads"
权限外还需要 "downloads.open"
权限。项目第一次打开时将产生 onChanged 事件。
在文件管理器中显示默认的下载文件夹。
从历史记录中删除匹配的 DownloadItem(下载项),但不会删除已下载的文件,匹配 query
的每一个 DownloadItem 都会产生一次 onErased 事件,然后调用 callback
。
filename
)或 URL 包含所有不以减号('-')开始的搜索条目并且不包含所有以减号('-')开始的搜索条目。
totalBytes
大于指定整数的 DownloadItem。
totalBytes
小于指定整数的 DownloadItem。
filename
匹配指定正则表达式的 DownloadItem。
url
匹配指定正则表达式的 DownloadItem。
orderBy: ['startTime']
将使下载项按开始时间升序排列。如果要降序排列,请在前面使用连字符:'-startTime'。
如果您指定了 callback 参数,它应该指定一个如下形式的函数:
function(array of integer erasedIds) {...};
如果文件存在并且i DownloadItem(下载项)已完成,则删除已下载的文件,否则通过 runtime.lastError 返回错误。
如果您指定了 callback 参数,它应该指定一个如下形式的函数:
function() {...};
提示用户接受有风险的下载,不会自动接受有风险的下载。如果下载项被接受,将产生 onChanged 事件,否则什么都不会发生。当所有数据都获取至临时文件后,如果下载项没有风险或者已被接受,该临时文件将被重命名为目标文件名,state
更改为 'complete',并产生 onChanged 事件。
如果您指定了 callback 参数,它应该指定一个如下形式的函数:
function() {...};
启用或禁用窗口底部与当前浏览器的用户配置文件相关联的灰色下载框,只要有至少一个扩展程序禁用它则下载框就会被禁用,在其他扩展程序禁用下载框时启用它会导致错误,通过 runtime.lastError 返回。除了 "downloads"
权限以外还需要 "downloads.shelf"
权限。
下载开始时产生该事件,并传递 DownloadItem 对象。
callback 参数应该指定一个如下形式的函数:
function(DownloadItem downloadItem) {...};
当下载项从历史记录中删除时产生,并传递 downloadId
。
callback 参数应该指定一个如下形式的函数:
function(integer downloadId) {...};
id
。
除 bytesReceived
和 estimatedEndTime
以外,当某个 DownloadItem(下载项)的任何属性更改时,会产生该事件,并传递 downloadId
以及描述属性更改的对象。
callback 参数应该指定一个如下形式的函数:
function(object downloadDelta) {...};
url
属性的更改(如果有的话)。
filename
属性的更改(如果有的话)。
danger
属性的更改(如果有的话)。
mime
属性的更改(如果有的话)。
startTime
属性的更改(如果有的话)。
endTime
属性的更改(如果有的话)。
state
属性的更改(如果有的话)。
canResume
属性的更改(如果有的话)。
pause
属性的更改(如果有的话)。
error
属性的更改(如果有的话)。
totalBytes
属性的更改(如果有的话)。
fileSize
属性的更改(如果有的话)。
exists
属性的更改(如果有的话)。
在确定文件名的过程中,扩展程序有机会修改目标 DownloadItem.filename(文件名)。每一个扩展程序不能为该事件注册一个以上的监听器,每个监听器必须恰好调用一次 suggest
,既可以是同步地,也可以是异步地。如果监听器异步地调用 suggest
,它必须返回 true
。如果监听器既没有同步地调用 suggest
,也没有返回 true
,则会自动调用 suggest
。在所有监听器调用 suggest
前,DownloadItem(下载项)不会完成。监听器应该不传递任何参数调用 suggest
,允许下载项使用 downloadItem.filename
作为它的文件名,或者向 suggest
传递一个 suggestion
对象,修改目标文件名。如果不止一个扩展程序修改文件名,最后安装并且向 suggest
传递 suggestion
对象的扩展程序优先。为了避免哪个扩展程序优先造成的混淆,用户不应该安装可能会导致冲突的扩展程序。如果下载由 download 发起,并且在 MIME 类型和待定文件名确定前就指定了文件名,请将 filename
传递给 download。
callback 参数应该指定一个如下形式的函数:
function(DownloadItem downloadItem, function suggest) {...};