使用Mozilla Firefox扩展将字符串对象内容下载为纯文本文件

时间:2013-02-20 18:15:28

标签: javascript firefox-addon download

在我的FF扩展中,我创建了一个从DOM中检索数据的对象(字符串)。

现在我需要下载包含字符串内容的纯文本文件。结果应该是CSV文件。

我读到了addDownload方法,但我错过了很多篇幅......有什么提示吗?

主要是我不知道如何:

  1. 在可下载对象(文件?)中“转换”我的字符串

  2. 正确调用addDownload方法(nsIURI等)

  3. 非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你有很多方法。老式的方法是直接操作nsIFilensIFileOutputStream,尽管你不能用这种方式写空字节。您还可以从字符串中创建nsIStringInputStream并将其写入输出流,或者可以使用nsIAsyncStreamCopier异步复制它。 FileUtils.jsmNetUtil.jsm存在,旨在让您更轻松。

但是,如果您要定位足够新版本的Firefox,则可以忽略所有这些版本并改为使用OS.File API。

答案 1 :(得分:0)

这是我的扩展程序的一部分,它显示另存为对话框,以便用户可以选择正确的位置(您可以跳过该部分或尝试找出应自动下载的位置)

const nsIFilePicker = Components.interfaces.nsIFilePicker;

var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window, "Save as", nsIFilePicker.modeSave);
fp.appendFilters(nsIFilePicker.filterHTML);
fp.appendFilters(nsIFilePicker.filterAll);

var rv = fp.show();
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
var file = fp.file;

// work with returned nsILocalFile...
// Check that it has some extension
var name = file.leafName;
if (-1==name.indexOf('.'))
file.leafName = name + '.html' ;

// file is nsIFile, data is a string
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance(Components.interfaces.nsIFileOutputStream);

// use 0x02 | 0x10 to open file for appending.
foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
// write, create, truncate

foStream.write(data, data.length);
foStream.close();