首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firefox 26的默认下载目录

Firefox 26的默认下载目录
EN

Stack Overflow用户
提问于 2014-01-02 16:17:23
回答 1查看 410关注 0票数 1

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

代码语言:javascript
复制
var defaultDownloadsDirectory = Components.classes["@mozilla.org/download-manager;1"].getService(Components.interfaces.nsIDownloadManager).defaultDownloadsDirectory;

虽然火狐26很好用,但建议不要再使用nsIDownloadManager了。链接

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-02 19:27:25

嗯,上面的代码暂时还能用.

由于我最近不得不自己更新这些东西,下面是我想出的代码。它是向后兼容的。

代码语言:javascript
复制
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;
  }
})();

是啊,太恶心了。没有错误处理的简单方法是:

代码语言:javascript
复制
Cu.import("resource://gre/modules/Downloads.jsm");
Downloads.getPreferredDownloadsDirectory().then(function(result) {
  // do something with |result|
});

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20887026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档