3

can any body tell me how i create a .txt file using javascript which is browser compatable too.

and after creating the file it gives the save as diaglog box so that i can save the file that is created.

any other logic is also wellcome

i am doing it well in IE,

but the same code isn't running in the other browsers

Susam Pal
  • 32,765
  • 12
  • 81
  • 103
aditya
  • 485
  • 3
  • 12
  • 22

6 Answers6

2

You can't do this, for hopefully obvious security reasons. JavaScript has no access to the file system...in IE it's not JavaScript, but ActiveX doing this...it just has a JavaScript API exposed.

The problem isn't that Firefox doesn't do this...it's that IE ever allowed it :)

In this post In Firefox, Write to a File using Javascript?

Community
  • 1
  • 1
hirikarate
  • 3,055
  • 4
  • 21
  • 27
1

If you're looking for IE only solution, try this:

function createFile() {
    set fso = new ActiveXObject("Scripting.FileSystemObject");
    set s = fso.CreateTextFile("C:\test.txt", True);
    s.writeline("HI");
    s.writeline("Bye");
    s.writeline("-----------------------------");
    s.Close();
}
Mrchief
  • 75,126
  • 20
  • 142
  • 189
  • Is **Scripting.FileSystemObject** a Microsoft proprietary solution @Mrchief? – Saeed Neamati Jul 28 '11 at 05:06
  • @Saeed, see my edit. You're creating an ActiveX object which is obviously IE only. And `Scripting.FileSystemObject` is from Windows Scripting component. – Mrchief Jul 28 '11 at 05:11
1

you need to send the data to the server and then offer a link to download it. Here's a terrible example with jquery and php just to give you basic idea.

$.ajax({
    type: "post",
    url: "ajax.php",
    data: {
        type: "save",
        text: "this is some text you want to send"
    },
    dataType: "json",
    success: function(data){
        window.open(data["url"]);
    }
});

ajax.php

<?php
    if($_POST["type"] == "save"){
        $name = "random_name.txt";
        file_put_contents("$name",$_POST["text"]);

        echo json_encode(array(
            "type" => "link",
            "url" => "http://yourserver.com/{$name}"
        ));
    }

?>
Ilia Choly
  • 18,070
  • 14
  • 92
  • 160
1

For a great example of how to do this, look at TiddlyWiki which implements a single user wiki in Javascript. It supports all the major browsers and in each will save a copy of itself to the local disk.

It uses the FileSystemObject in IE (as described previously in this question) The best info for file saves in FireFox is https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO

For Chrome, Opera & Safari is uses a little applet:

The TiddlySaver Java applet allows TiddlyWiki to save changes in a local version (from a file:// URL) of Safari, Opera and other browsers.

Lindsay Morsillo
  • 530
  • 6
  • 19
0

One may indeed initiate data URL downloads, including in a way to prompt a file dialog (though not with a default path or even file type). See https://stackoverflow.com/a/13696029/271577 for such a solution (along with text link examples). That being said, opening the content in a new tab via data URLs may be a better solution if you can get users to manually save using their browser.

Community
  • 1
  • 1
Brett Zamir
  • 14,034
  • 6
  • 54
  • 77
0

You can only do this by sending your data to a server-side language, which can write to files. Then you could send the location of the file back and redirect the user there.

Jason Kaczmarsky
  • 1,666
  • 1
  • 17
  • 30