Mettere un'intera pagina offline utilizzando l'API FileSystem HTML5

Ammettiamolo, AppCache è fastidioso e presenta problemi [1, 2, 3]. Un'importante limitazione è il fatto che non è possibile memorizzare nella cache dinamicamente gli asset on demand. In sostanza, si tratta di un approccio tutto o niente quando si tratta di mettere un'app offline. O viene memorizzata nella cache tutta la manifest o non viene memorizzata nella cache nessuna risorsa.

L'API FileSystem HTML5 diventa una soluzione interessante per le carenze di AppCache. È possibile archiviare file e gerarchie di cartelle in modo programmatico nel file system locale (in sandbox) e successivamente aggiungere/aggiornare/rimuovere singole risorse in base alle necessità. Il mio collega Boris Smus ha persino scritto una bella libreria per gestire questo tipo di memorizzazione nella cache offline nel contesto dei giochi. La stessa idea può essere estrapolata per funzionare con qualsiasi tipo di app web.

crbug.com/89271 è una correzione importante per l'API FileSystem che consente di utilizzare i percorsi filesystem: URL relativi senza problemi.

Supponiamo, ad esempio, di aver salvato index.html nella cartella principale del file system (fs.root), di aver creato una cartella img e di aver salvato "test.png" al suo interno. L'URL filesystem: per questi due file sarà rispettivamente filesystem:http://example.com/temporary/index.html e filesystem:http://example.com/temporary/img/test.png. Poi, se volevo utilizzare "test.png" per un img.src, dovevo utilizzare il percorso assoluto completo: <img src="filesystem:http://example.com/temporary/img/test.png">. Ciò ha comportato la riscrittura di tutti gli URL relativi in index.html in modo che puntino all'URL filesystem: del file corrispondente. Non va bene. Ora, con questa correzione del bug, posso mantenere il percorso relativo al file (<img src="img/test.png">) perché verrà risolto correttamente in un'origine del file system.

Questa funzionalità semplifica il download di una pagina e il salvataggio di tutte le relative risorse offline, mantenendo inalterata la stessa struttura di cartelle della versione online.