2011-11-10 17 views
5

quiero salvar un objeto JSON a un archivo en el cliente para que persisten para uso futuro, he tratado siguiente línea¿Cómo guardar un archivo en el lado del cliente usando JavaScript?

window.open("data:text/json;charset=utf-8," + escape(JSON.stringify(obj)));

y funciona !! Problema pregunta al usuario la ubicación y el nombre del archivo para guardar. Lo que quiero es que desee que el usuario no tenga en cuenta el hecho de que algo se está guardando para su uso futuro o al menos mantenerlo al mínimo posible de los clics del usuario.

¿Cómo puedo dar el nombre de archivo y la ubicación estáticamente en window.open()?

Gracias de antemano,

EDIT

Sólo para que quede claro que "No almacenar datos arbitrarios o no deseados. Todos los usuarios son usuarios del sistema registradas". En condiciones normales, no almaceno nada localmente. Sin embargo, quiero almacenar algunos objetos JSON si la red no estaba disponible en el momento del envío del formulario.

Una solución obvia será el uso de cookies. Dado que las cookies se pueden eliminar accidentalmente debido a la configuración del navegador del usuario. Necesito una forma de conservar los datos hasta que la red esté disponible. Será mejor tener soporte de navegador cruzado.

+4

Java no es JavaScript. Son idiomas completamente separados. – Pointy

+0

Además, no puede forzar que los archivos se guarden en equipos cliente desde un entorno de navegador. Es una medida de seguridad bastante obvia. – Pointy

+0

@Kapep Quiero los valores para soporte de navegador cruzado, incluso si el usuario cambia el navegador, él/ella debería poder continuar desde donde se fue. Estoy almacenando información en objetos JSON. – aProgrammer

Respuesta

2

Quiero que los valores para el apoyo multi-navegador, incluso si el usuario cambia el navegador él/ella debe ser capaz de proceder desde donde lo dejó. Estoy almacenando información en objetos JSON.

Creo que los usuarios no esperan que una aplicación web comparta información con otros navegadores en la misma máquina de esta manera. Además, dudo que muchos usuarios cambien su navegador con demasiada frecuencia de todos modos para garantizar una característica invasiva de privacidad como esta. Usted debe considerar ya sea el almacenamiento de la información en el servidor (al obligar a un usuario a registrarse o utilizar cuentas comunes como OpenID, Google, Facebook, etc) o en el lado del cliente mediante el establecimiento de una galleta o el uso de las tecnologías de almacenamiento mencionados.

Si realmente desea restringir la información almacenada a los navegadores en la misma máquina, y no desea permitir el acceso del mismo usuario en diferentes máquinas, puede echar un vistazo a LSO ('Flash cookies') que parecen para ser salvado navegador independiente. No necesita ninguna confirmación del usuario para almacenar LSO.

Actualización: Flash no es compatible con los navegadores como solía ser y no se usa ampliamente en la actualidad, por lo que los LSO ya no son una buena opción.

+0

los usuarios ya serán un usuario registrado de mi sitio ... y almaceno datos solo cuando temporalmente no hay una red disponible ... para todos los demás casos (es decir, cuando la red está disponible) No almaceno nada ... de todos modos Gracias ... – aProgrammer

7

Si desea conservar los datos, a continuación, utilizar a storage API, no se puede jugar con el sistema de archivos del usuario.

+1

+1, también pruebe [store.js] (https://github.com/marcuswestin/store.js) - un contenedor localStorage. – Daniel

4

No se puede hacer eso, es una cuestión de seguridad en el lado del cliente.

1

Como ya se ha mencionado en los comentarios, esto no es posible sin el consentimiento expreso del usuario, por razones obvias de seguridad. Sin embargo, como también se menciona en los comentarios, usted debería almacenar la información en una cookie que luego se podrá recuperar cuando el usuario regrese.

algo como esto lo haría

document.cookie="cookie_name="+required_value+"; expires=Monday, 04-Dec-2011 05:00:00 GMT"; 

obviamente el que expire el tiempo será el tiempo que necesita la información para persistir.

esperanza de que ayuda a

+0

Tengo el valor en cookie ... en realidad es la cookie que estoy escribiendo (o tratando de escribir) en un archivo para el caso donde el usuario cambia el navegador la próxima vez o borra las cookies ... – aProgrammer

2

FileSystem APIs es parte de especificación HTML5 y es posible acceder a sistema de archivos en un entorno limitado para un determinado sitio web en los navegadores modernos, aquí es un buen tutorial: http://www.html5rocks.com/en/tutorials/file/filesystem/

Sin embargo, me gustaría ir con LocalStorage API para el caso que tiene un mejor soporte de los navegadores: http://www.w3schools.com/html5/html5_webstorage.asp

+0

" La API del sistema de archivos en la que se basa este proyecto se ha desaprobado y ya no es compatible con la mayoría de los navegadores principales. Este repositorio solo existe para fines de archivo. " https://github.com/keithwhor/FSO.js/ –

2

FSO.js envuelve la API de sistema de ficheros temporal/persistente y le permitirá leer fácilmente/escribir archivos ... Sólo con el apoyo de cromo en este momento, pero la especificación está llegando a lo largo rápido. :)

+0

"La API del sistema de archivos en la que se basa este proyecto ha quedado obsoleta y ya no es compatible con la mayoría de los principales navegadores. Este repositorio solo existe para fines de archivo." https://github.com/keithwhor/FSO.js/ –

Cuestiones relacionadas