我使用下面的代码获取Firefox 25及更低版本的默认下载目录:
var defaultDownloadsDirectory = Components.classes["@mozilla.org/download-manager;1"].getService(Components.interfaces.nsIDownloadManager).defaultDownloadsDirectory;
虽然它适用于Firefox 26,但建议不再使用nsIDownloadManager。 link
如何获得Firefox 26及更高版本的默认下载目录?
答案 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是异步的。没有同步变体。