Saludos,provocando una descarga de archivos sin ningún tipo de solicitud del servidor
estoy trabajando en una aplicación basada en JS que hace un trabajo complejo y registra alguna información (en realidad, hasta cientos de líneas) en un <div>
.
Mi objetivo es tener un botón "Guardar registro" que activa el diálogo de descarga del navegador para guardar el contenido de mi registro <div>
.
más concisa, estos son los requisitos para esta función:
- El usuario final debe tener un control total sobre el archivo. Debería ser capaz de guardarlo/archivarlo para referencia futura, enviarlo por correo al departamento de soporte para obtener ayuda para solucionar algún problema, cargarlo nuevamente en la aplicación, etc. Así que la API de almacenamiento web de HTML5 no ayuda aquí (los datos obtener guardado en una ubicación definida por el navegador y no sería fácilmente recuperable, excepto desde el JS que lo crea).
- La aplicación debe poder funcionar sin conexión (al menos en algunas circunstancias). Eso, y la eficiencia, es la razón por la que descarté la idea de PUBLICAR los datos en el servidor para recuperarlos con un encabezado de "disposición de contenido".
- El archivo debe marcarse correctamente como
text/plain
, por lo que el navegador puede sugerir acciones predeterminadas (como "Abrir en el bloc de notas") igual que con una descarga normal de archivos. Esto se puede ver como un aspecto específico del primer requisito. - Decirle al usuario que copie y pegue el contenido de
<div>
en un editor de texto y guardarlo definitivamente es horrible, y es exactamente por eso que trato de evitarlo.
He estado buscando en este sitio, en los sitios WHATWG y W3C y en la web en general sin éxito. ¿Esto es factible?
Lo más cercano que tengo es usando una url data:
. Mi primer intento, realizar una acción POST, no pudo obtener un tipo de contenido, por lo que retrocedería a la heurística de la UA. Lo conseguí un poco mejor diseñando un enlace <a>
para que pareciera un botón y le diera un atributo type
, pero entonces el UA jugará de forma demasiado inteligente y renderizará el contenido en lugar de guardarlo (y le pedirá al usuario que guarde el archivo desde el navegador en ese paso es incluso peor que tomar el enfoque de copiar y pegar, ya que el ahorro de página varía enormemente entre navegadores).
Si hubiera alguna forma de combinar una url data:
con una sugerencia similar a la de "disposición de contenido", las cosas podrían ir realmente bien.
Saludos, Herenvardo
¿Está utilizando un complemento como Flash sin la pregunta? No sé si es posible hacerlo con HTML estándar, pero sería bastante fácil si Flash fuera una opción ... –
Tenía una pregunta similar http://stackoverflow.com/questions/2832392/can-you- do-file-io-using-javascript-without-activex pero solo tiene una respuesta. No creo que sea posible sin embargo. –
¿Apareció la "copia en el portapapeles con código y pidiéndole al usuario que la pegue en una libreta (o editor de texto favorito)"? El portapapeles puede manejar megabytes, aunque el bloc de notas podría ahogarse en algunos megabytes. Por otro lado: vea http://stackoverflow.com/questions/17836273/export-javascript-data-to-csv-file-without-server-interaction – TWiStErRob