这是我最近做的一个任务的例子:
var dJsm = Components.utils.import("resource://gre/modules/Downloads.jsm").Downloads;
var tJsm = Components.utils.import("resource://gre/modules/Task.jsm").Task;
var fuJsm = Components.utils.import("resource://gre/modules/FileUtils.jsm").FileUtils;
var view = {
onDownloadChanged: function(download) {
cDump(download, 'Changed');
if (download.succeeded) {
var file = fuJsm.File(this.target.path));
cDump(file,'file);
}
}
};
tJsm.spawn(function () {
let list = yield dJsm.getList(Downloads.ALL);
list.addView(view);
//list.removeView(view);
}).then(null, Components.utils.reportError);
function cDump(obj,title) {
var tstr = '';
var bstr = '';
var fstr = '';
for (var b in obj) {
try {
bstr += b + '=' + obj[b] + '\n';
} catch (e) {
fstr = b + '=' + e + '\n';
}
}
tstr += '<b>BSTR::</b>\n' + bstr;
tstr += '\n<b>FSTR::</b>\n' + fstr;
var cWin = Services.wm.getMostRecentWindow('navigator:browser');
var onloadFunc = function () {
cWin.gBrowser.selectedTab = cWin.gBrowser.tabContainer.childNodes[cWin.gBrowser.tabContainer.childNodes.length - 1];
newTabBrowser.removeEventListener('load', onloadFunc, true);
if (title) { newTabBrowser.contentDocument.title = title; }
newTabBrowser.contentDocument.body.innerHTML = tstr.replace(/\n/g, '<br>')
};
var newTabBrowser = cWin.gBrowser.getBrowserForTab(cWin.gBrowser.addTab('about:blank'));
newTabBrowser.addEventListener('load', onloadFunc, true);
}