2010-03-22 12 views
13

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});}; 
+0

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

Respuesta

5

El mejor que he visto en cuanto es Downloadify por Doug Neiner, se requiere Flash, pero funciona muy bien:

"Una pequeña JavaScript + Biblioteca Flash que permite la generación y el almacenamiento de archivos sobre la marcha, en el navegador, sin la interacción del servidor ".

Compruebe esto video.

+1

Bien, un envoltorio alrededor de la API vinculada en mi respuesta. Bonito. – spender

+0

Gracias por el puntero, esa es una gran pequeña biblioteca. Licencia de software libre, relativamente fácil de usar. Es una pena que necesite Flash, pero no me sorprende si Javascript no puede hacer frente. Nota: la descarga se guarda en el disco por Flash, no pasa por el administrador de descargas del navegador. Actualizaré mi pregunta con un fragmento de código que demuestra cómo funciona esta biblioteca. – Nelson

+2

Esa URL de arriba está muerta. Parece que puedes encontrar descargar en github aquí: https://github.com/dcneiner/Downloadify –

Cuestiones relacionadas