Colocar uma página inteira off-line usando a API FileSystem HTML5

Sejamos francos, o AppCache é chato e tem problemas [1, 2, 3]. Uma grande limitação é o fato de que é impossível armazenar recursos em cache dinamicamente sob demanda. Basicamente, isso faz com que seja uma coisa de tudo ou nada quando se trata de deixar um aplicativo off-line. Ou tudo no manifesto é armazenado em cache antecipadamente ou nada é armazenado.

A API FileSystem HTML5 se torna uma solução atraente para as limitações do AppCache. É possível armazenar programaticamente arquivos e hierarquias de pastas no sistema de arquivos local (sandbox) e, posteriormente, adicionar/atualizar/remover recursos individuais conforme necessário. Meu colega Boris Smus até escreveu uma boa biblioteca para gerenciar esse tipo de armazenamento em cache off-line no contexto dos jogos. A mesma ideia pode ser extrapolada para funcionar com qualquer tipo de aplicativo da Web.

crbug.com/89271 é uma correção importante para a API FileSystem, que faz com que os caminhos relativos do sistema de arquivos: URL funcionem como um charm.

Digamos, por exemplo, que eu salvei o index.html na pasta raiz do sistema de arquivos (fs.root), criei uma pasta "img" e salvei "test.png" nela. O URL filesystem: desses dois arquivos seria filesystem:http://example.com/temporary/index.html e filesystem:http://example.com/temporary/img/test.png, respectivamente. Então, se eu quisesse usar "test.png" para uma img.src, seria necessário usar o caminho absoluto completo: <img src="filesystem:http://example.com/temporary/img/test.png">. Isso significava reescrever todos os URLs relativos em index.html para apontar para o URL filesystem: do arquivo correspondente. Isso não foi legal! Agora, com a correção desse bug, posso manter o caminho relativo para o arquivo (<img src="img/test.png">), que vai ser resolvido corretamente para uma origem do sistema de arquivos.

Esse recurso simplifica o processo de abrir uma página e salvar todos os recursos off-line, preservando exatamente a mesma estrutura de pastas que a versão on-line.