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

Sejamos honestos, o AppCache é irritante e está com problemas [1, 2, 3]. Uma grande limitação é a impossibilidade de armazenar recursos em cache dinamicamente sob demanda. Essencialmente, é uma questão de tudo ou nada quando se trata de colocar um aplicativo off-line. Tudo no manifesto é armazenado em cache antecipadamente ou nada é armazenado em cache.

A API FileSystem de HTML5 se torna uma solução atraente para as deficiências do AppCache. É possível armazenar, programaticamente, arquivos e hierarquias de pastas no sistema de arquivos local (sandbox) e subsequentemente 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 de 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 filesystem: URL relativos funcionem como um charme.

Digamos, por exemplo, que eu salvei 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. Em seguida, para usar "test.png" para um 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 é legal! Agora, com essa correção de bug, posso manter o caminho relativo para o arquivo (<img src="img/test.png">), já que ele vai ser resolvido corretamente para uma origem do sistema de arquivos.

Com esse recurso, fica mais fácil selecionar uma página e salvar todos os seus recursos off-line, preservando a mesma estrutura de pastas que a versão on-line.