在firefox sdk builder中下载文件(代码片段)

时间:2013-06-18 13:44:34

标签: firefox-addon firefox-addon-sdk

我正在尝试在mozilla sdk builder中获得第一个块代码。 (Web IDE)

https://developer.mozilla.org/en-US/docs/Code_snippets/Downloading_Files

这是mozilla SDK builder的代码

var {Cc, components , Cu} = require("chrome");

Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm");

const WebBrowserPersist = components.Constructor("@mozilla.org/embedding/browser/nsWebBrowserPersist;1",
                                                 "nsIWebBrowserPersist");

var persist = WebBrowserPersist();

var targetFile = Services.dirsvc.get("Desk", Ci.nsIFile);
targetFile.append("file.bin");

// Obtain the privacy context of the browser window that the URL
// we are downloading comes from. If, and only if, the URL is not
// related to a window, null should be used instead.

persist.persistFlags = persist.PERSIST_FLAGS_FROM_CACHE
                     | persist.PERSIST_FLAGS_REPLACE_EXISTING_FILES;

persist.saveURI('https://forums.mozilla.org/addons/styles/ca_gen2/imageset/logo.png', null, null, null, "", 'c:\\temp\\', null);

出现此错误

An exception occurred. undefined: Unexpected error in XPConnect undefined 6

4 个答案:

答案 0 :(得分:2)

function DownloadFile(sLocalFileName, sRemoteFileName)
{
    var saveToDirectory = 'C:\\Users\\louis\\downloads\\';

    var chrome = require("chrome");

    var oIOService = chrome.Cc["@mozilla.org/network/io-service;1"].getService(chrome.Ci.nsIIOService)

    var oLocalFile = chrome.Cc["@mozilla.org/file/local;1"].createInstance(chrome.Ci.nsILocalFile);
    oLocalFile.initWithPath(saveToDirectory + sLocalFileName);

    var oDownloadObserver = {onDownloadComplete: function(nsIDownloader, nsresult, oFile) {console.log('download complete...')}};

    var oDownloader = chrome.Cc["@mozilla.org/network/downloader;1"].createInstance();
    oDownloader.QueryInterface(chrome.Ci.nsIDownloader);
    oDownloader.init(oDownloadObserver, oLocalFile);

    var oHttpChannel = oIOService.newChannel(sRemoteFileName, "", null);
    oHttpChannel.QueryInterface(chrome.Ci.nsIHttpChannel);
    oHttpChannel.asyncOpen(oDownloader, oLocalFile);    

}
DownloadFile("saveAsThis.mp3","http://domain.com/file.mp3");

将其复制/粘贴到main.js中,文件将在后台下载,无需弹出或下载管理器。

答案 1 :(得分:1)

https://github.com/inbasic/iaextractor/blob/master/src/lib/download.js

这应该有效。但第一个问题仍然是秘密。

答案 2 :(得分:1)

//add Ci
var {Cc, Ci, Cu} = require("chrome");
//import Services
var { Services } = Cu.import("resource://gre/modules/Services.jsm");

//the 6th arg of saveURI must a nsIFile object, can't use string
var oLocalFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
oLocalFile.initWithPath("c:\\temp\\logo.png");
if(!oLocalFile.exists()){
    oLocalFile.create(oLocalFile.NORMAL_FILE_TYPE, 0666);
}

//create the persist variable like this
var persist = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(Ci.nsIWebBrowserPersist);
persist.persistFlags = persist.PERSIST_FLAGS_FROM_CACHE
                 | persist.PERSIST_FLAGS_REPLACE_EXISTING_FILES;

//the 1st arg of saveURI must a URI object
persist.saveURI(Services.io.newURI('https://forums.mozilla.org/addons/styles/ca_gen2/imageset/logo.png', null, null), null, null, null, "", oLocalFile, null);

答案 3 :(得分:0)

如果查看错误控制台,您很可能会看到Services未定义。

添加以下行

Components.utils.import("resource://gre/modules/Services.jsm");