Firefox插件下载.jsm

5

我正在尝试在一个Jetpack插件中使用Firefox的Downloads.jsm库(它是Firefox 23中的新功能)。

var {Cu} = require("chrome"); //works fine
const {Downloads} = Cu.import("resource://gre/modules/Downloads.jsm"); //works fine

但是执行这两个函数都没有任何效果:
download = Downloads.createDownload({source: "http://cdn.sstatic.net", target: "/tmp/kaki.html"}); //download is an object but has no function "start"
Downloads.simpleDownload("http://cdn.sstatic.net","/tmp/kaki.html");

文档: https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download 你知道如何使用这些函数吗?我在网上没有找到任何示例。
1个回答

6
API函数返回promise,而不是实际的下载对象。
简而言之,以下内容应该有效:
const {Downloads} = Cu.import("resource://gre/modules/Downloads.jsm", {});
var downloadPromise = Downloads.createDownload({source: "http://cdn.sstatic.net", target: "/tmp/kaki.html"})
downloadPromise.then(function success(d) {
  d.start();
});

阅读promises,为了更有趣地处理它们,还可以使用Task.jsm

API 最近确实发生了很大的变化;所记录的是当前的 Aurora-25 或更高版本的 API。"旧" API 在source中有记录。

Firefox <25 支持的更完整的示例可在此gist中找到。


谢谢你的回答!现在我离解决方案更近了。我发现必须设置saver:"copy"参数。在这种情况下,成功函数被调用,d确实是一个Download对象。但是d.start()仍然没有效果。 - balping
我提供的代码在我的Chrome特权刮板(在OSX Nightly上)中逐字运行,即/tmp/kaki.html会以正确的内容创建。如果您需要更多帮助,请使用更多细节来完善您的问题并进行详细说明。 - nmaier
请问您能否在Add-on builder上分享您的示例?我已经完全复制了您的代码,但它无法运行。我正在运行Ubuntu 12.04,但我真的不知道出了什么问题。如果您能帮忙解决,我将非常感激。 - balping
事实证明,在<=24(Beta)>=25(Aurora)之间,API发生了相当大的变化。我在这里发布了一个更完整的示例,包括版本检测:https://gist.github.com/nmaier/6220299 - nmaier
非常感谢,您的帮助是不可或缺的!这段代码完美运行。 - balping

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接