downloads.download()
downloads API 的 download() 函式可以使用 URL 和其他可選偏好來下載檔案。
如果 URL 使用 HTTP 或 HTTPS 協議,請求將包含所有相關的 Cookie,即為該 URL 的主機名設定的 Cookie、安全標誌、路徑等。預設的 Cookie,即來自正常瀏覽會話的 Cookie,將被使用,除非
- 使用了
incognito選項,此時將使用隱私瀏覽的 Cookie。 - 使用了
cookieStoreId選項,此時將使用指定儲存區的 Cookie。
如果同時指定了 filename 和 saveAs,則會顯示“另存為”對話方塊,並預填充 filename。
這是一個非同步函式,返回一個 Promise。
語法
let downloading = browser.downloads.download(
options // object
)
引數
options-
一個
object,用於指定您希望下載的檔案以及您希望為下載設定的任何其他偏好。它可以包含以下屬性:allowHttpErrors可選-
一個
boolean標誌,允許在遇到 HTTP 錯誤時繼續下載。使用此標誌,例如,可以下載伺服器錯誤頁面。預設值為false。當設定為false時,遇到 HTTP 錯誤時將取消下載。true時,遇到 HTTP 錯誤時下載將繼續,並且不會報告 HTTP 伺服器錯誤。但是,如果由於檔案相關、網路相關、使用者相關或其他錯誤而導致下載失敗,則會報告該錯誤。
body可選-
一個
string,表示請求的 post body。 conflictAction可選-
一個字串,表示在發生檔名衝突時要採取的操作,如
downloads.FilenameConflictAction型別中定義的那樣(如果未指定,則預設為 "uniquify")。 -
下載關聯的 上下文身份 的 Cookie 儲存區 ID。如果省略,則使用預設 Cookie 儲存區。使用此項需要 "cookies" API 許可權。有關更多資訊,請參閱 使用上下文身份。
filename可選-
一個
string,表示相對於預設下載目錄的路徑——這提供了您希望檔案儲存的位置以及您希望使用的檔名。絕對路徑、空路徑、以點(.)開頭和/或結尾的路徑元件以及包含反向引用的路徑(../)將導致錯誤。如果省略,此值將預設為已分配給下載檔案的檔名,並儲存在下載目錄內的位置。 headers可選-
如果 URL 使用 HTTP 或 HTTPS 協議,則為一個
object陣列,表示要與請求一起傳送的其他 HTTP 標頭。每個標頭都表示為一個字典物件,包含name和value或binaryValue鍵。XMLHttpRequest和fetch禁止的標頭不能指定,但是,Firefox 70 及更高版本支援使用Referer標頭。嘗試使用禁止的標頭會引發錯誤。 incognito可選-
一個
boolean:如果存在且設定為 true,則將此下載與隱私瀏覽會話關聯。這意味著它僅出現在任何當前開啟的私有視窗的下載管理器中。 method可選-
一個
string,表示如果url使用 HTTP[S] 協議則要使用的 HTTP 方法。可以是 "GET" 或 "POST"。 saveAs可選-
一個
boolean,指定是提供檔案選擇器對話方塊以允許使用者選擇檔名(true),還是不提供(false)。如果省略此選項,瀏覽器將根據使用者對此行為的總體偏好顯示檔案選擇器(在 Firefox 中,此偏好在 about:preferences 中標記為“始終詢問儲存檔案的位置”,或在 about:config 中為
browser.download.useDownloadDir)。注意:如果
saveAs設定為true,Firefox for Android 將引發錯誤。當saveAs為false或未包含時,此引數將被忽略。 url-
一個
string,表示要下載的 URL。
返回值
一個 Promise。如果下載成功啟動,則 Promise 將使用新 downloads.DownloadItem 的 id 來 fulfill。否則,Promise 將使用 downloads.InterruptReason 中的錯誤訊息來 reject。
如果您使用 URL.createObjectURL() 下載 JavaScript 中建立的資料,並且之後想撤銷物件 URL(使用 revokeObjectURL)(強烈建議這樣做),您需要在下載完成後進行。為此,請監聽 downloads.onChanged 事件。
示例
以下程式碼段嘗試下載一個示例檔案,還指定了儲存它的檔名和位置,以及 conflictAction 選項的值 uniquify。
function onStartedDownload(id) {
console.log(`Started downloading: ${id}`);
}
function onFailed(error) {
console.log(`Download failed: ${error}`);
}
let downloadUrl = "https://example.org/image.png";
let downloading = browser.downloads.download({
url: downloadUrl,
filename: "my-image-again.png",
conflictAction: "uniquify",
});
downloading.then(onStartedDownload, onFailed);
瀏覽器相容性
載入中…
注意:此 API 基於 Chromium 的 chrome.downloads API。