subir por otro manejo llamar linea leer funcion desde con archivos archivo abrir javascript persistence tiddlywiki

por - manejo de archivos en javascript



¿Puede javascript acceder a un sistema de archivos? (6)

Esta pregunta ya tiene una respuesta aquí:

Estaba bastante seguro de que la respuesta era NO , y por lo tanto Google Gear, Adobe AIR, etc.

Si tenía razón, ¿cómo funciona http://tiddlywiki.com ? Es persistente y está escrito en javascript. También es solo un único archivo HTML que no tiene dependencias externas (en el lado del servidor). WTF? ¿Dónde / cómo almacena su estado?


¿Puede javascript acceder a un sistema de archivos?

No fuera del área de la zona de pruebas mencionada anteriormente, según mi leal saber y entender. Sin embargo, puede acceder a un applet Java firmado que tiene métodos públicos invocables que pueden acceder a todos los archivos. Lo he hecho y funciona bien y es un navegador cruzado.

La parte de firma es algo complicada y para uso profesional es posible que deba pagar un certificado de firma de código que autoriza su identidad. Obténgalo de algún lugar como Verisign. De esa forma, los usuarios al menos sabrán para quién está escrito el applet (si eso ayuda). Puede firmarlo usted mismo de forma gratuita, pero una de esas ventanas emergentes de "posible riesgo de seguridad" se producirá en el primer uso para la autorización del usuario.

Podrías pensar que ya existirían tales applets firmados para la escritura de archivos para descargar, pero no pude encontrar ninguna vía de búsqueda. Si lo hicieran, podría simplemente enchufarlo en su página, aprender la API y listo.


La respuesta es de hecho NO. Los applets de Java y los temidos complementos de ActiveX generalmente se usan si es necesario


Las API de HTML5 [ 1 ], FileWriter [ 2 ] y FileSystem [ 3 ] están disponibles en el último canal de desarrollador de Google Chrome. La API FileSystem le permite leer / escribir en un sistema de archivos de sandbox dentro de un espacio que conoce el navegador. No puede, por ejemplo, abrir la carpeta ''Mis imágenes'' en el FS local del usuario y leer / escribir en eso. Eso es algo en proceso, pero no estará listo por un tiempo. Ejemplo de escribir un archivo:

window.requestFileSystem( TEMPORARY, // persistent vs. temporary storage 1024 * 1024, // 1MB. Size (bytes) of needed space initFs, // success callback opt_errorHandler // opt. error callback, denial of access ); function initFs(fs) { fs.root.getFile(''logFile.txt'', {create: true}, function(fileEntry) { fileEntry.createWriter(function(writer) { // FileWriter writer.onwrite = function(e) { console.log(''Write completed.''); }; writer.onerror = function(e) { console.log(''Write failed: '' + e.toString()); }; var bb = new BlobBuilder(); bb.append(''Lorem ipsum''); writer.write(bb.getBlob(''text/plain'')); }, errorHandler); } }

Consulte este portaobjetos de almacenamiento HTML5 para obtener más fragmentos de código.


Técnicamente puedes hacer

netscape.security.PrivilegeManager.enablePrivilege(''UniversalBrowserWrite'');

en un navegador compatible con netscape (Firefox, Mozilla, Netscape), y le preguntará al usuario * si permite o no el acceso al sistema de archivos, pero esto no es portátil.

* una vez por proceso de navegador


Tiddlywiki tiene varios métodos para guardar datos, dependiendo de qué navegador se use. Como pudieron ver en la fuente .

  • Si ActiveX está habilitado, usa Scripting.FileSystemObject.
  • En los navegadores basados ​​en Gecko, intenta usar UniversalXPConnect.
  • Si Java está habilitado, usa el applet Java de TiddlySaver.
  • Si Java LiveConnect está habilitado, intenta usar las clases de archivos de Java.

Utiliza referencias de un archivo java como este:

drivers.tiddlySaver = { name: "tiddlySaver", deferredInit: function() { if(!document.applets["TiddlySaver"] && !$.browser.mozilla && !$.browser.msie && document.location.toString().substr(0,5) == "file:") { $(document.body).append("<applet style=''position:absolute;left:-1px'' name=''TiddlySaver'' code=''TiddlySaver.class'' archive=''TiddlySaver.jar'' width=''1''height=''1''></applet>"); } }, isAvailable: function() { return !!document.applets["TiddlySaver"]; }, loadFile: function(filePath) { var r; try { if(document.applets["TiddlySaver"]) { r = document.applets["TiddlySaver"].loadFile(javaUrlToFilename(filePath),"UTF-8"); return (r === undefined || r === null) ? null : String(r); } } catch(ex) { } return null; }, saveFile: function(filePath,content) { try { if(document.applets["TiddlySaver"]) return document.applets["TiddlySaver"].saveFile(javaUrlToFilename(filePath),"UTF-8",content); } catch(ex) { } return null; } }