6

現在、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);

  }
});

しかし、どれも機能していません..

4

4 に答える 4

3

必要に応じて宛先ディレクトリを作成し、ファイルに書き込む (上書きする) 作業スニペットを次に示します (この場合は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"));
}

詳しくは:

于 2013-06-04T19:16:35.993 に答える
1

Firefox 拡張機能を使用して、Windows のファイルシステムからファイルを読み書きする方法の簡単な例:

// Write File to filesystem
Components.utils.import("resource://gre/modules/osfile.jsm");    // load the OS module
var encoder = new TextEncoder();    // This encoder can be reused for several writes
var array = encoder.encode("just some text");   // Convert the text to an array
var promise = OS.File.writeAtomic("C:\\foo.txt", array,{tmpPath: "foo.txt.tmp"});   // Write the array atomically to "file.txt", using as temporary

alert("URL HOST has been saved");

//Read File from filesystem
var decoder = new TextDecoder();        // This decoder can be reused for several reads
var promise = OS.File.read("C:\\foo.txt"); // Read the complete file as an array
promise = promise.then(
    function onSuccess(array) {
        alert(decoder.decode(array));        // Convert this array to a text
    }
);
于 2014-05-07T20:27:41.840 に答える
1

このソリューションは、ubuntu でファイルを作成するためのものです。これが他の人に役立つことを願っています。

var file = Components.classes["@mozilla.org/file/directory_service;1"].  
               getService(Components.interfaces.nsIProperties).  
               get("ProfD", Components.interfaces.nsIFile);  
file.append("trick_new");  
if( !file.exists() || !file.isDirectory() ) {  // if it doesn't exist, create  
    file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777);  
}  
this.log_file = file.path + "/newlog.html";
于 2014-01-14T05:14:59.520 に答える
0

text-stream を使用してローカル ファイルに書き込むこともできます。

function writeTextToFile(text, filename) {
  var fileIO = require("sdk/io/file");
  var TextWriter = fileIO.open(filename, "w");
  if (!TextWriter.closed) {
    TextWriter.write(text);
    TextWriter.close();
  }
}
于 2016-01-21T06:49:57.413 に答える