ทำให้หน้าเว็บทั้งหน้าเป็นแบบออฟไลน์โดยใช้ HTML5 FileSystem API

ยอมรับเถอะว่า AppCache น่ารำคาญและมีปัญหา [1, 2, 3] ข้อจำกัดที่สำคัญอย่างหนึ่งคือ การแคชเนื้อหาแบบไดนามิกตามคำขอไม่ได้ และหลักๆ ก็คือทำให้แอปออฟไลน์ไปเลยหรือไม่ต้องดำเนินการใดๆ เลย ทุกอย่างในไฟล์ Manifest จะได้รับการแคชไว้ตั้งแต่ต้น หรือไม่มีการแคชเลย

FileSystem API ของ HTML5 กลายเป็นโซลูชันที่น่าสนใจสำหรับข้อบกพร่องของ AppCache ผู้ใช้สามารถจัดเก็บไฟล์และลำดับชั้นโฟลเดอร์ไว้ในระบบไฟล์ในเครื่อง (แซนด์บ็อกซ์) โดยอัตโนมัติ แล้วเพิ่ม/อัปเดต/นำทรัพยากรออกได้ตามต้องการ เพื่อนร่วมงานของฉันชื่อ Boris Smus ได้เขียนคลังที่ดูดีไว้ใช้จัดการการแคชแบบออฟไลน์ประเภทนี้ในบริบทของเกมด้วย แนวคิดเดียวกันนี้สามารถนำมาปรับใช้กับเว็บแอปได้ทุกประเภท

crbug.com/89271 เป็นการแก้ไขที่สำคัญสำหรับ FileSystem API ซึ่งทำให้เส้นทาง filesystem: URL แบบสัมพัทธ์ทำงานเหมือนอักขระ

สมมติว่าเราบันทึก index.html ไว้ในโฟลเดอร์รากของระบบไฟล์ (fs.root) สร้างโฟลเดอร์ img และบันทึก "test.png" ไว้ในนั้น URL filesystem: สำหรับ 2 ไฟล์จะเป็น filesystem:http://example.com/temporary/index.html และ filesystem:http://example.com/temporary/img/test.png ตามลำดับ จากนั้น หากต้องการใช้ "test.png" สำหรับ img.src ฉันต้องใช้เส้นทางสัมบูรณ์ของ <img src="filesystem:http://example.com/temporary/img/test.png"> ซึ่งหมายความว่าคุณจะต้องเขียน URL สัมพัทธ์ทั้งหมดใน index.html ให้ชี้ไปยัง URL filesystem: ของไฟล์ที่เกี่ยวข้อง ไม่เจ๋งเลยว่ะ ตอนนี้ด้วยการแก้ไขข้อบกพร่องนี้ ฉันสามารถเก็บเส้นทางที่เกี่ยวข้องไปยังไฟล์ได้ (<img src="img/test.png">) เพราะระบบจะแก้ไขไปยังต้นทางของระบบไฟล์ได้อย่างถูกต้อง

คุณลักษณะนี้ช่วยให้คุณดึงหน้าเว็บลงและบันทึกทรัพยากรทั้งหมดแบบออฟไลน์ได้ไม่ยาก ขณะเดียวกันก็ยังคงโครงสร้างโฟลเดอร์เหมือนกับเวอร์ชันออนไลน์