我使用下面的代码获取Firefox 25及以下版本的默认下载目录:
var defaultDownloadsDirectory = Components.classes["@mozilla.org/download-manager;1"].getService(Components.interfaces.nsIDownloadManager).defaultDownloadsDirectory;虽然火狐26很好用,但建议不要再使用nsIDownloadManager了。链接
如何获得Firefox 26及以上版本的默认下载目录?
发布于 2014-01-02 19:27:25
嗯,上面的代码暂时还能用.
由于我最近不得不自己更新这些东西,下面是我想出的代码。它是向后兼容的。
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是异步的。没有同步变量。
https://stackoverflow.com/questions/20887026
复制相似问题