Desconecta una página completa con la API del sistema de archivos HTML5

Admitámoslo, AppCache es molesto y tiene problemas [1, 2, 3]. Una gran limitación es que es imposible almacenar en caché de forma dinámica los recursos on demand. En esencia, esto hace que sea todo o nada cuando se trata de usar una app sin conexión. O bien todo el manifiesto se almacena en caché de antemano, o bien no se almacena nada en caché.

La API de FileSystem de HTML5 se convierte en una solución atractiva para las deficiencias de AppCache. Se pueden almacenar archivos y jerarquías de carpetas de forma programática en el sistema de archivos local (en la zona de pruebas) y, luego, agregar, actualizar o quitar recursos individuales según sea necesario. Mi colega, Boris Smus, incluso escribió una biblioteca interesante para administrar este tipo de almacenamiento en caché sin conexión en el contexto de los juegos. La misma idea se puede extrapolar para funcionar con cualquier tipo de app web.

crbug.com/89271 es una corrección importante para la API de FileSystem que hace que las rutas de acceso relativas filesystem: URL funcionen de forma correcta.

Supongamos que guardé index.html en la carpeta raíz del sistema de archivos (fs.root), creé una carpeta img y guardé “test.png” en ella. La URL de filesystem: para esos dos archivos sería filesystem:http://example.com/temporary/index.html y filesystem:http://example.com/temporary/img/test.png, respectivamente. Luego, si quisiera usar "test.png" para un img.src, tendría que usar su ruta de acceso absoluta completa: <img src="filesystem:http://example.com/temporary/img/test.png">. Eso significaba reescribir todas las URLs relativas en index.html para que apunten a la URL filesystem: del archivo correspondiente. ¡No está bien! Ahora, con esta corrección de errores, puedo mantener la ruta de acceso relativa al archivo (<img src="img/test.png">), ya que se resolverá correctamente en un origen del sistema de archivos.

Esta función facilita la descarga de una página y el guardado de todos sus recursos sin conexión, a la vez que conserva la misma estructura de carpetas que la versión en línea.