我正在尝试在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
答案 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");