firefox-addon - 如何使用 Firefox 扩展在本地文件系统中创建 .txt

标签 firefox-addon

我目前正在研究 ffsniff 扩展代码。因为我必须将包含密码信息的数据保存到本地系统的文件中。我已经编写了我的代码,但它甚至没有在我的本地系统中创建文件。 (在 mozilla Firefox 中工作)

这是我的代码,请帮助我。

//// here data variable contains all the information
var fso = new ActiveXObject("Scripting.FileSystemObject");
varFileObject = fso.OpenTextFile("C:\\logs.txt", 2, true,0);
varFileObject.write(data);
varFileObject.close();

在此之后我尝试了不同的代码:
Components.utils.import("resource://gre/modules/NetUtil.jsm");
Components.utils.import("resource://gre/modules/FileUtils.jsm");

var file = Components.classes["@mozilla.org/file/directory_service;1"].
           getService(Components.interfaces.nsIProperties).
           get("Desk", Components.interfaces.nsIFile);
 file.append("logs.txt");


var ostream = FileUtils.openSafeFileOutputStream(file)

var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].
            createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
converter.charset = "UTF-8";
var istream = converter.convertToInputStream(data);

  }
});

但他们都没有工作..

最佳答案

这是一个工作片段,它在必要时创建目标目录并写入(覆盖)到文件(在本例中为 d:\temp-directory\temp-file.txt):

var {Cc,Ci,Cu}=require("chrome");  //for jetpack sdk.
Cu.import("resource://gre/modules/NetUtil.jsm");  
Cu.import("resource://gre/modules/FileUtils.jsm"); 
var localFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
var data="test file content";

  //localFile.initWithPath("D:\\temp-directory\\temp-file.txt");  //full path is okay if directory exists

localFile.initWithPath("D:\\temp-directory\\");                 //otherwise specifiy directory, create it if necessary, and append leaf.
if(!localFile.exists()){
    localFile.create(localFile.DIRECTORY_TYPE,FileUtils.PERMS_DIRECTORY);
}
localFile.append("temp-file.txt");

  //localFile.createUnique(localFile.NORMAL_FILE_TYPE,FileUtils.PERMS_FILE);  //optional: create a new unique file.

asyncSave(localFile,data,onDone);

function asyncSave(file,data,callbackDone){    
      // file is nsIFile, data is a string, optional: callbackDone(path,leafName,statusCode)    
      // default flags:  FileUtils.openSafeFileOutputStream(file, FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_TRUNCATE);  
    var ostream = FileUtils.openSafeFileOutputStream(file); 
    var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);  
    converter.charset = "UTF-8";  
    var istream = converter.convertToInputStream(data);  

      // optional: callbackSaved(status).  
    NetUtil.asyncCopy(istream, ostream, callbackSaved); 
    function callbackSaved (status) {     
        if(callbackDone){
            if(status===0)callbackDone( file.path, file.leafName, status);  //sucess.
            else callbackDone( null, null, status); //failure.
        }; 
    }
}
function onDone(path,leafName,statusCode){
    console.log([statusCode===0?"OK":"error",path,leafName].join("\n"));
}

更多信息:
  • https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O
  • https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm
  • https://developer.mozilla.org/en-US/docs/PR_Open
  • https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/NetUtil.jsm
  • https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIFile
  • https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsILocalFile
  • 关于firefox-addon - 如何使用 Firefox 扩展在本地文件系统中创建 .txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16910065/

    相关文章:

    javascript - Firefox 附加组件声明功能并在内容脚本中使用

    javascript - Components.classes 错误 - VS 2013 中的 FireFox 附加组件(扩展)

    firefox-addon - 检查 Flash 对象中的元素

    javascript - 了解 ConsumerRollupEvent

    firefox-addon - 为什么包裹在 firefox 插件中的用户脚本会比 greasemonkey 中的相同脚本慢?

    javascript - 类型错误 : [API] is undefined in content script or Why can't I do this in a content script?

    javascript - XUL Richlistbox选择问题

    javascript - 从 firefox 扩展读取 HTTP 响应

    javascript - 使用位于插件文件夹内的参数执行二进制文件

    无法使用 ctypes.open() 加载 dll