user186889
user186889

Reputation:

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();">

Upvotes: 0

Views: 14251

Answers (3)

Ravi Vanapalli
Ravi Vanapalli

Reputation: 9950

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

Upvotes: 1

user838691
user838691

Reputation: 320

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>

Upvotes: 0

calvinlough
calvinlough

Reputation: 345

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.

Upvotes: 0

Related Questions