Generate some xml in javascript, prompt user to save it?

Which is based on Flash and jQuery, which can prompt you dialog box to save file in your computer. Downloadify. Create('downloadify',{ filename: function(){ return document.

GetElementById('filename'). Value; }, data: function(){ return document. GetElementById('data').

Value; }, onComplete: function(){ alert('Your File Has Been Saved! '); }, onCancel: function(){ alert('You have cancelled the saving of this file.'); }, onError: function(){ alert('You must put something in the File Contents or there will be nothing to save! '); }, swf: 'media/downloadify.

Swf', downloadImage: 'images/download. Png', width: 100, height: 30, transparent: true, append: false }).

1 Flash is the only way I've ever seen to do what you are asking. This answer (jQuery / event driven) is a very elegant solution. – Jonathan Julian Feb 20 '10 at 14:03 Yeah this is probably going to be the only answer to my question -- even if I don't want to rely on flash.(I didn't say so up there though :P ).

I can always rely on flash or elevated privileges. S. Mark, do you know if there is an equivalent for loading a file via javascript?(Again, of course, prompting the user).

– Adam Luter Feb 20 '10 at 14:44 If someone doesn't mind clarifying this point -- I work with flash developers, but never with flash myself -- the site says it's compiled for online use only. I assume that I could get it compiled to work locally too? – Adam Luter Feb 20 '10 at 14:48 @Adam - Yea, you could compile for local usage - but not "too".

In the "Publish Settings" dialog, Flash asks if you want "Network Access" only, or "Local Access" only. Unless we are not referring to the same thing. – Moshe Feb 21 '10 at 3:58 @Moshe, Thanks for the tidbit -- I've never worked in flash before.

That'd be OK since I could do network access, and then rely on elevated privileges for local access. But it means I'll probably just start with elevated privileges and only do flash when I'm done and want it to work on a static web host. – Adam Luter Feb 21 '10 at 13:14.

Javascript is not allowed to write to a local machine. Your question is similar to this one. I suggest creating a simple desktop app.

3 Thanks Bill, I know this is the standard answer, I'd like some rational why the DOM thinks that Click is secure enough to prompt the user to save the file (and in many of today's browser's it doesn't even prompt...). But if I used JS to create the txt file say some psuedo-code like: Click, this is somehow inherently less secure? Theoretically, it should be less secure to have to ask the network for the data again, since this isn't a secure connection (http vs https).

– Adam Luter Feb 20 '10 at 2:50.

Without any more insight into your specific requirements, I would not recommend a pure Javascript/HTML solution. From a user perspective you would probably get the best results writing a native application. However if it will be faster to use Javascript/HTML, I recommend using a local application hosting a lightweight web server to serve up your content.

That way you can cleanly handle the file saving server-side while focusing the bulk of your effort on the front-end application. You can code up a web server in - for example - Python or Ruby using very few lines of code and without 3rd party libraries. For example, see: Making a simple web server in python WEBrick - Writing a custom servlet python-trick-really-little-http-server - This one is really simple, and will easily let you server up all of your HTML/CSS/JS files: """ Serves files out of its current directory.

Doesn't handle POST requests. """ import SocketServer import SimpleHTTPServer PORT = 8080 def move(): """ sample function to be called via a URL""" return 'hi' class CustomHandler(SimpleHTTPServer. SimpleHTTPRequestHandler): def do_GET(self): #Sample values in self for URL: http://localhost:8080/jsxmlrpc-0.3/ #self.

Path '/jsxmlrpc-0.3/' #self. Raw_requestline 'GET /jsxmlrpc-0.3/ HTTP/1.1rn' #self. Client_address ('127.0.0.1', 3727) if self.

Path=='/move': #This URL will trigger our sample function and send what it returns back to the browser self. Send_response(200) self. Send_header('Content-type','text/html') self.

End_headers() self.wfile. Write(move()) #call sample function here return else: #serve files, and directory listings by following self. Path from #current working directory SimpleHTTPServer.

SimpleHTTPRequestHandler. Do_GET(self) httpd = SocketServer. ThreadingTCPServer(('localhost', PORT),CustomHandler) print "serving at port", PORT httpd.

Serve_forever() Finally - Depending on who will be using your application, you also have the option of compiling a Python program into a Frozen Binary so the end user does not have to have Python installed on their machine.

Thank you Justin for your very thorough reply. My ideal here is that the file could be a local html (or local folder of html, etc. ) or on a static host (cheap) when there is net. Based on the resources I have, I do not want to develop a "real" app.

(But if I did, I'd probably pick Ruby or Python). Freezing Python is a big plus if I broke down. But I really just want to stick to a static html/js/css "web" app (minus the web).

The application is a "basic enter data, then a guided process for composing it". The UI will be pretty basic and I just need to save/load state as XML. – Adam Luter Feb 20 '10 at 2:43 You're welcome.

I think if you are planning to go with a html/js/css solution, however, you will still want a back-end - albeit a minimalist one. – Justin Ethier Feb 20 '10 at 15:29.

Web traditionally can't save to hard drive because of security concerns. PHP can push files though it requires a server. Print to PDF plugins are available for available for all browsers.

Install once, print to PDF forever. Then, you can use a javascript or Flash to call a Print function. Also, if you are developing for an environment where internet access is spotty, conwider using VB.

NET or some other desktop language. EDIT: You can use the browser's Print function.

Moshe, thank you for your reply. (read my other comments on using a webserver, local or otherwise, and also about using something other than html/js/css). I have to use XML, it's just a requirement (and not a really horrible one considering the data).

But I didn't mention in my question (because it was a separate question) that I need to be able to load the same XML file later too (so, printing to PDF would be great, except I'd not be able to load from it). Using the print function is clever, but I don't think it would work for XML data. – Adam Luter Feb 20 '10 at 2:57 @Adam - I don't see anything wrong with XML.

Why wouldn't print work for XML data? You can output the XML as a plain text to the browser. Loading the XML can be done either with Flash or with jQuery as XML can be loaded into the browser like any other (text/html) file can.

– Moshe Feb 21 '10 at 4:02 Guh, I hate AJAX comment boxes, because I always end up losing the contents after finishing a box and then having an accident (like hitting backspace after hitting tab accidentally). Anyway -- I was saying I think the print+XML route is, at the least, too difficult for a user. Maybe even worse than saying "hey click here, then choose save/as, then click back" (if I went the route where I could bring the XML up as it's own page).

I just want it to be a normal save/load routine for the user's sanity/sake. (So, it looks like Flash could help me out, or elevated privileges). – Adam Luter Feb 21 '10 at 13:11.

Thank you tr4656, no I am already familiar with the XML api available in JS. I am trying to get that xml saved to the local disk through a user prompted save dialog. Similarly (and this is a separate question), I am also wanting to prompt the user to load a file (but again without a web server involved).

Barring any of that, I'll settle for a convincing argument (even a historical one) on why it's less secure (rather than just having to believe it). – Adam Luter Feb 20 '10 at 2:53 @Adam - I agree with you that this whole security argument is somewhat bogus or at the very least, unexplained. – Moshe Feb 21 '10 at 4:03.

With IE you could use document. ExecCommand, but I note that IE is not an option. Here's something that looks like it might help, although it will not prompt with SaveAs dialog, https://developer.mozilla.Org/en/Code_snippets/File_I%2F%2FOL.

Jonathan, your link is broken, but my guess it's the elevated privilege code I mention in the 2nd lower paragraph. Thanks though! :) – Adam Luter Feb 20 '10 at 14:42.

One simple but odd way to do this that doesn't require any Flash is to create an with a data URI for its href. This even has pretty good cross-browser support, although for IE it must be at least version 8 and the URI must be.

Yeah but as I note in my comment to the question, a data uri won't work in the case of wanting any sort of sane filename. – Adam Luter Feb 21 '10 at 0:23.

I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.

Related Questions