Firefox 26的默认下载目录

时间:2014-01-02 16:17:24

标签: javascript firefox firefox-addon

我使用下面的代码获取Firefox 25及更低版本的默认下载目录:

var defaultDownloadsDirectory = Components.classes["@mozilla.org/download-manager;1"].getService(Components.interfaces.nsIDownloadManager).defaultDownloadsDirectory;

虽然它适用于Firefox 26,但建议不再使用nsIDownloadManager。 link

如何获得Firefox 26及更高版本的默认下载目录?

1 个答案:

答案 0 :(得分:0)

嗯,上面的代码暂时仍然有效......

由于我最近必须更新这些内容,这里是我提出的代码。它向后兼容。

const getDefaultDownloadsDirectory = (function() {
  function oldFallback(callback) {
    let dlm = Cc["@mozilla.org/download-manager;1"].getService(Ci.nsIDownloadManager);
    var dir;
    try {
      dir = dlm.userDownloadsDirectory;
    }
    catch (ex) {
      dir = dlm.defaultDownloadsDirectory;
    }
    callback(dir.path);
  }

  try {
    let Downloads = Cu.import("resource://gre/modules/Downloads.jsm", {}).Downloads;
    if (!Downloads.getPreferredDownloadsDirectory) {
      throw new Error("not supported");
    }
    return function newDownloads(callback) {
      var p = Downloads.getPreferredDownloadsDirectory();
      if (!p) {
        oldFallback(callback);
        return;
      }
      p.then(function success(r) {
        callback(r);
      }, function fail(e) {
        oldFallback(callback);
      });
    };
  }
  catch (ex) {
    return oldFallback;
  }
})();
是的,这是非常讨厌的。 没有错误处理的简短方法是:

Cu.import("resource://gre/modules/Downloads.jsm");
Downloads.getPreferredDownloadsDirectory().then(function(result) {
  // do something with |result|
});

请注意,这个新API是异步的。没有同步变体。