使用 HTML5 FileSystem API 離線存取整個網頁

坦白說,AppCache 很麻煩,而且有問題 [123]。其中一個重大限制是無法根據需求動態快取素材資源。因此,在離線應用程式方面,您只能選擇全部或全部不做。資訊清單中的所有項目都會事先快取,或是完全不快取。

HTML5 FileSystem API 是解決 AppCache 缺點的理想解決方案。您可以透過程式設計將檔案和資料夾階層儲存在本機 (沙箱) 檔案系統中,然後視需要新增/更新/移除個別資源。我的同事 Boris Smus 甚至寫了一個不錯的程式庫,用於在遊戲情境中管理這類離線快取。同樣的概念也可以套用在任何類型的網頁應用程式。

crbug.com/89271 是 FileSystem API 的重要修正項目,可讓相對 filesystem: URL 路徑正常運作。

舉例來說,我將 index.html 儲存在檔案系統的根資料夾 (fs.root) 中,並建立 img 資料夾,然後將「test.png」儲存在其中。這兩個檔案的 filesystem: 網址分別是 filesystem:http://example.com/temporary/index.htmlfilesystem:http://example.com/temporary/img/test.png。接著,如果我想為 img.src 使用「test.png」,就必須使用完整的絕對路徑:<img src="filesystem:http://example.com/temporary/img/test.png">。也就是說,您必須重新撰寫 index.html 中的所有相對網址,以便指向對應檔案的 filesystem: 網址。不上道!修正這個錯誤後,我可以保留檔案的相對路徑 (<img src="img/test.png">),因為它們會正確解析為檔案系統來源。

這項功能可讓您輕鬆下載網頁並離線儲存所有資源,同時保留與線上版本完全相同的資料夾結構。