Przenoszenie całej strony do trybu offline przy użyciu interfejsu HTML5 FileSystem API

Działanie AppCache jest denerwujące i ma problemy [1, 2, 3]. Jednym z głównych ograniczeń jest brak możliwości dynamicznego buforowania zasobów na żądanie. W zasadzie wszystko działa albo nie ma problemu z używaniem aplikacji do odtwarzania offline. Cała zawartość pliku manifestu jest przechowywana w pamięci podręcznej lub nic nie jest przechowywane w pamięci podręcznej.

Interfejs FileSystem API w języku HTML5 staje się atrakcyjnym rozwiązaniem dla mankamentów AppCache. Można programowo przechowywać pliki i hierarchie folderów w lokalnym systemie plików (w trybie piaskownicy), a następnie w razie potrzeby dodawać, aktualizować lub usuwać poszczególne zasoby. Mój współpracownik Boris Smus stworzył nawet niezłą bibliotekę, aby zarządzać tego rodzaju pamięcią podręczną offline w kontekście gier. Podobne pomysły można ekstrapolować do działania w każdej aplikacji internetowej.

crbug.com/89271 to ważna poprawka w interfejsie API FileSystem, która sprawia, że względne ścieżki filesystem: URL działają jak panel informacyjny.

Załóżmy na przykład, że plik index.html został zapisany w folderze głównym systemu plików (fs.root), utworzony folder img i zapisany w nim plik „test.png”. Adres URL filesystem: w przypadku tych 2 plików to odpowiednio filesystem:http://example.com/temporary/index.html i filesystem:http://example.com/temporary/img/test.png. Następnie, aby użyć pliku „test.png” dla elementu img.src, trzeba było użyć jego pełnej ścieżki bezwzględnej: <img src="filesystem:http://example.com/temporary/img/test.png">. Oznaczało to konieczność przepisania wszystkich względnych adresów URL w pliku index.html, tak aby wskazywały adres URL pliku filesystem:. Nieładnie! Dzięki naprawieniu tego błędu mogę zachować ścieżkę względną do pliku (<img src="img/test.png">), ponieważ pliki te zostaną prawidłowo rozpoznane jako źródło systemu plików.

Dzięki tej funkcji pobranie strony i zapisanie wszystkich jej zasobów offline jest bardzo proste przy zachowaniu identycznej struktury folderów z wersją online.