我正在构建一个附加组件,该附加组件启动可执行文件以启用高级智能代理。我已经能够完美地启动可执行文件,但exe的大小合适,我需要为每个操作系统使用不同的。
我不想将它们全部打包到附加组件中,因为这会导致不必要的大文件大小。我希望附件能够在安装后为客户端的操作系统下载正确的文件。
我找到了nsIDownloader,但它唯一的方法是init(),它接受观察者和下载位置。我不知道如何给它Web服务器位置。似乎缺少大量关于它的文档。
答案 0 :(得分:0)
nsIDownloader
可能听起来像是一个很好的起点,但它实际上只是一个低级辅助API,并且因为它在主/ UI线程上执行同步I / O而灰心丧气。 / p>
我改为使用相对较新的异步Downloads.fetch()
高级助手。
E.g。以下内容适用于Scratchpad。如果执行环境有console
(例如叠加,或Console.jsm
),或者调用console.log
调用,则它也可以在任何加载项中使用。
Cu.import("resource://gre/modules/Task.jsm");
Cu.import("resource://gre/modules/Downloads.jsm");
Task.spawn(function() {
var file = Services.dirsvc.get("TmpD", Ci.nsIFile);
file.append("test.download");
try {
yield Downloads.fetch("http://example.org/", file);
console.log(file.path);
console.log(file.exists());
console.log(file.fileSize);
}
catch (ex) {
console.log("Download Failed", ex);
}
});