0

私の FF 拡張では、DOM からデータを取得するオブジェクト (文字列) を作成します。

ここで、文字列コンテンツを含むプレーン テキスト ファイルをダウンロードする必要があります。結果は CSV ファイルになります。

メソッドについて読みましaddDownloadたが、多くの部分を見逃しています...何かヒントはありますか?

主に次の方法がわかりません。

  1. 文字列をダウンロード可能なオブジェクト (ファイル?) に「変換」します。

  2. メソッドを正しく呼び出すaddDownload(nsIURI など)

助けてくれてありがとう。

4

2 に答える 2

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();
于 2013-02-23T09:28:03.613 に答える
0

いくつかのアプローチがあります。この方法ではnull バイトを書き込むことはできませんが、昔ながらの方法は直接nsIFile操作することです。nsIFileOutputStreamまた、文字列からを作成nsIStringInputStreamして出力ストリームに書き込むことも、nsIAsyncStreamCopier非同期でコピーするために使用することもできます。FileUtils.jsmこれを簡単にするためにNetUtil.jsm存在します。

ただし、十分に新しいバージョンの Firefox をターゲットにしている場合は、それをすべて無視して、OS.File代わりに API を使用できます。

于 2013-02-21T22:41:30.917 に答える