Firefox扩展将数据写入文件

时间:2014-05-16 23:28:49

标签: javascript firefox

我的Firefox扩展中有一个像数据集一样的hashTable,我愿意将它保存在一个简单的文本文件中。我一直在阅读很多示例代码,但这些代码都不适用于我。例如,12。我是开发Firefox扩展的初学者,在我看来,写入文件的语法有点复杂。谁能给我一个有效的例子?顺便说一下,我正在使用unix。因为我看到了写一个文件的例子,他们正在使用Windows系统调用。

2 个答案:

答案 0 :(得分:1)

这是一个将名为myfile.txt的文件写入firefox配置文件目录的示例代码:

    var txt = "my file contents";

    var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD",  Components.interfaces.nsIFile);
    file.append("myfile.txt");
    var fs = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
    fs.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
    fs.write(txt, txt.length);
    fs.close();

如果您使用的是Firefox Addon SDK(jetpack),则需要对其进行一些修改。

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

    var txt = "my file contents";

    var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
    file.append("myfile.txt");
    var fs = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
    fs.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
    fs.write(txt, txt.length);
    fs.close();

答案 1 :(得分:0)

这是更简单直接的方式:

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

// Saving the pointed filename into your Firefox profile
let whereToSave = OS.Path.join(OS.Constants.Path.profileDir, "YOUR-FILENAME.txt");

// Convert your "hash table" to a Typed Array[1]
let dataToSave = hashTableAsArrayBufferView;

// Check MDN[2] for writeAtomic() details
OS.File.writeAtomic(whereToSave, dataToSave).then(function(aResult) {
    // Write operation finished
    ...
}, Components.utils.reportError);

[1]:https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView

[2]:https://developer.mozilla.org/en-US/docs/JavaScript_OS.File/OS.File_for_the_main_thread#OS.File.writeAtomic%28%29

相关问题