Estoy escribiendo un código JavaScript que genera un documento XML en el cliente (a través de Google Earth plugin). Me gustaría que el usuario pueda hacer clic en un botón en la página y se le pregunte si desea guardar ese XML en un nuevo archivo. Si estuviera generando el lado del servidor XML esto sería fácil, solo haga que el botón abra el enlace. Pero el XML se genera en el lado del cliente.¿Cómo creo dinámicamente un documento para descargar en Javascript?
He encontrado un par de hacks que funcionan a medias, inspirados en parte por this StackOverflow question. Pero ninguno de los dos funciona por completo. He aquí una demostración HTML con código incrustado:
<html><head><script>
function getData() { return '<?xml version="1.0" encoding="UTF-8"?><doc>Hello</doc>'; }
function dlDataURI() {
window.open("data:text/xml;charset=utf-8," + getData());
}
function dlWindow() {
var w = window.open();
w.document.open();
w.document.write(getData());
w.document.close();
}
</script><body>
<div onclick="dlDataURI()">Click for Data URL</div>
<div onclick="dlWindow()">Click for Window</div>
</body></html>
La versión dlDataURI() funciona muy bien en Firefox, mal en Chrome (no se puede guardar), y no del todo en el IE. La versión de Windows() funciona bien en Firefox e IE, y no está bien en Chrome (no se puede guardar, XML incrustado dentro de HTML). Ninguna de las dos versiones solicita una descarga del usuario, siempre abre una nueva ventana tratando de mostrar el XML.
¿Hay una buena manera de hacer lo que quiero en el lado del cliente Javascript? Me gustaría que esto funcione en los navegadores de hoy, idealmente Firefox, MSIE 8 y Chrome.
de actualización con código de ejemplo Downloadify
window.onload = function() {
Downloadify.create("dlify", {
data: getData(),
filename: "data.xml",
swf: 'media/downloadify.swf',
downloadImage: 'images/download.png',
width: 100, height: 30});};
Esta nueva pregunta desbordamiento de pila tiene una gran cantidad de respuestas que no requieren flash. La mayoría involucra la construcción de 'data:' URLs en el DOM. https://stackoverflow.com/questions/19721439/download-json-object-as-a-file-from-browser – Nelson