开发者

Write to a textfile using Javascript

Under Firefox, I want to do something like this :

I have a .htm file, that has a button on it. This button, when I click it, the action will write a text inside a local .txt file. By the way, my .htm file is run locally too.

I have tried multiple times using this code, but still cant make my .htm file write to my textfile:

function save() {
try {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
    alert("Permission to save file was denied.");
}
var file = Components.classes["@mozilla.org/file/local;1"]
    .createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( savefile );
if ( file.exists() == false ) {
    alert( "Creating file... " );
    file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 开发者_开发知识库420 );
}
var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
    .createInstance( Components.interfaces.nsIFileOutputStream );

outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 );
var output = 'test test test test';
var result = outputStream.write( output, output.length );
outputStream.close();

}

This part is for the button:

<input type="button" value="write to file2" onClick="save();">


Javascript is not allowed to access hard drive but you can use ActiveXObject to create or write to text file using Javascript.

function writeToDisk(writeString) {

var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile(theFile, true);
a.WriteLine(writeString);
a.Close();
}

Happy coding


Even if you run it locally, I doubt that Firefox will let you access the filesystem. However, if you create an extension it would be able to access the filesystem.


Hi try this example still if you have the problem:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window
    id="mywindow"
    title="Find Files"
    orient="horizontal"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">



<grid flex="1">
  <columns>
    <column flex="1"/>
    <column/>
  </columns>
  <rows>
    <row>
    <box height="80">
        <label value="PDE-Identity"/>
        <textbox id="pde" value="" multiline="true"/>
      <row>
        <label value="FirstName"/>
        <textbox id="fname" value="" multiline="true"/>
      </row>
        <button id="save" label="save" oncommand="save();"/>
    </box>
     </row>
    </rows>
</grid>

<!--<script>
read();
</script>-->

<script type="application/x-javascript">
<![CDATA[

var savefile = "c:\\mozdata.xml";

function save() {
    try {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    } catch (e) {
        alert("Permission to save file was denied.");
    }
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath( savefile );
    if ( file.exists() == false ) {
        alert( "File is created " );
        file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
    }
    var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
        .createInstance( Components.interfaces.nsIFileOutputStream );
    /* Open flags
    #define PR_RDONLY       0x01
    #define PR_WRONLY       0x02
    #define PR_RDWR         0x04
    #define PR_CREATE_FILE  0x08
    #define PR_APPEND      0x10
    #define PR_TRUNCATE     0x20
    #define PR_SYNC         0x40
    #define PR_EXCL         0x80
    */
    /*
    ** File modes ....
    **
    ** CAVEAT: 'mode' is currently only applicable on UNIX platforms.
    ** The 'mode' argument may be ignored by PR_Open on other platforms.
    **
    **   00400   Read by owner.
    **   00200   Write by owner.
    **   00100   Execute (search if a directory) by owner.
    **   00040   Read by group.
    **   00020   Write by group.
    **   00010   Execute by group.
    **   00004   Read by others.
    **   00002   Write by others
    **   00001   Execute by others.
    **
    */
    outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 );
    var output = document.getElementById('pde').value;
    //var out = document.getElementById('fanme').value;
    var result = outputStream.write( output, output.length );
    outputStream.close();
    alert( "File is updated" );


}

<!--
function read() {
    try {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    } catch (e) {
        alert("Permission to read file was denied.");
    }
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath( savefile );
    if ( file.exists() == false ) {
        alert("File does not exist");
    }
    var is = Components.classes["@mozilla.org/network/file-input-stream;1"]
        .createInstance( Components.interfaces.nsIFileInputStream );
    is.init( file,0x01, 00004, null);
    var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
        .createInstance( Components.interfaces.nsIScriptableInputStream );
    sis.init( is );
    var output = sis.read( sis.available() );
    document.getElementById('blog').value = output;
}
-->

]]>
</script>

</window>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜