【问题标题】:Firefox Addon Downloads.jsmFirefox 插件下载.jsm
【发布时间】:2013-08-12 19:49:46
【问题描述】:

我正在尝试在 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

您知道如何使用这些功能吗?我在网上没有找到任何示例

【问题讨论】:

    标签: firefox download firefox-addon firefox-addon-sdk download-manager


    【解决方案1】:

    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 中。

    gist 中提供了支持 Firefox

    【讨论】:

    • 感谢您的回答!现在我更接近解决方案。我发现必须设置saver: "copy" 参数。在这种情况下,成功函数被调用,d 实际上是一个Download 对象。但是d.start()还是没有效果。
    • 我提供的代码在 chrome 特权暂存器中逐字地为我工作(无论如何在 OSX Nightly 上),即 /tmp/kaki.html 使用正确的内容创建。如果您需要更多帮助,请详细说明您的问题并详细说明。
    • 你能在Add-on builder分享你的例子吗?我完全复制了您的代码,但它不起作用。我正在运行 Ubuntu 12.04,我真的不知道出了什么问题。我将不胜感激
    • 原来 API 在 =25 (Aurora) 之间发生了很大变化。我发布了一个更完整的示例,包括。这里的版本检测:gist.github.com/nmaier/6220299
    • 非常感谢,您的帮助是不可或缺的!此代码完美运行
    猜你喜欢
    • 1970-01-01
    • 2019-09-07
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多