检测何时取消另存为对话框

Detect when saveAs dialog is canceled

按照此处的文档操作:https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/downloads/download

var options = {
  filename: 'dummyName.txt',
  url: 'https://some.url',
  conflictAction: 'uniquify',
  saveAs: true
};
var downloading = browser.downloads.download(options, function() {
  console.log('In callback');
});

console.log(downloading);
downloading.then(function() {
  console.log('started');
}, function() {
  console.log('failed');
});

在控制台中,我看到..

undefined
downloading is undefined
In callback
Unchecked lastError value: Error: Download canceled by the user

如果用户在对话框中取消保存,我如何防止 downloading.then 中的代码进入 运行?

其实很简单。只需从下载函数中删除 function() 部分,如下所示:

var options = {
    filename: 'dummyName.txt',
    url: 'https://some.url',
    conflictAction: 'uniquify',
    saveAs: true
};
var downloading = browser.downloads.download(options);

console.log("downloading object is " + downloading);

downloading.then(function(id) {
    console.log('started' + id);
}, function(error) {
    if(error.message == "Download canceled by the user"){
        // Do something
        console.log("not going into the success callback..");
    }else{
        console.log('failed' + error);
    }
});

您混淆了回调语法(您包含的 function() 在下载调用中执行的操作)和基于 Promise 的语法 (then())。

如果你想正确地捕获错误,最好使用基于 Promise 的语法来开发 Firefox 插件。

请注意,您可以对此进行简化

var downloading = browser.downloads.download(options);
downloading.then(onSuccess, onError);

browser.downloads.download(options).then(onSuccess, onError);

祝 Firefox 插件开发顺利!