Gỡ lỗi API Hệ thống tệp

Hệ thống tệp HTML5 là một API mạnh mẽ. Sức mạnh đi kèm với sự phức tạp. Sự phức tạp cũng như nhiều sự cố gỡ lỗi hơn. Rất tiếc, DevTools của Chrome hiện không hỗ trợ API Hệ thống tệp. Như vậy, việc gỡ lỗi sẽ khó khăn hơn bình thường. Nói một cách khó khăn, ý tôi là bắt buộc phải viết mã để liệt kê/xoá các tệp trong hệ thống tệp.

Trong quá trình thử nghiệm API Hệ thống tệp, tôi đã thu thập một số mẹo mà tôi nghĩ mình sẽ áp dụng. Mỗi mẹo có một loạt các giới hạn riêng, nhưng việc sử dụng kết hợp các giới hạn này sẽ giúp bạn thành công 90%. Sau đây là 5 công việc hàng đầu:

  1. Đảm bảo bạn hiện không chạy ứng dụng từ file://. Đây là dạng câu hỏi lén lút mà nhiều người gặp phải. Chrome áp dụng các quy định hạn chế về bảo mật lớn đối với file://. Nhiều API tệp nâng cao (BlobBuilder, FileReader, API hệ thống tệp, v.v.) báo lỗi hoặc tự động không hoạt động nếu bạn chạy ứng dụng trên máy từ file://. Nếu không có máy chủ web, bạn có thể khởi động Chrome bằng cờ --allow-file-access-from-files để bỏ qua hạn chế về bảo mật này. Chỉ sử dụng cờ này cho mục đích thử nghiệm.

  2. SECURITY_ERR hoặc QUOTA_EXCEEDED_ERR đáng sợ. Điều này thường xảy ra khi cố gắng ghi dữ liệu nhưng bạn lại chịu ảnh hưởng của #1. Nếu không phải như vậy thì có khả năng bạn không có hạn mức. Có hai loại hạn mức mà bạn có thể mở hệ thống tệp, đó là TEMPORARY hoặc PERSISTENT. Nếu bạn đang sử dụng chính sách thứ hai, người dùng cần cấp rõ ràng là bộ nhớ lâu dài cho ứng dụng của bạn. Hãy xem bài đăng này để biết cách thực hiện.

  3. filesystem: URL FTW. Bạn nên mở URL filesystem: cho DirectoryEntry gốc của nguồn gốc ứng dụng. Điều đó có nghĩa là gì? Ví dụ: nếu ứng dụng của bạn nằm trên www.example.com, hãy mở filesystem:http://www.example.com/temporary/ trong một thẻ mới. Chrome sẽ hiện danh sách chỉ có thể đọc cho các tệp/thư mục đã lưu trữ nguồn gốc của ứng dụng. Để biết thêm thông tin về URL filesystem:, hãy xem https://www.html5rocks.com/en/tutorials/file/filesystem/#toc-filesystemurls.

  4. chrome://settings/cookies là bạn của bạn. Trang này cho phép bạn huỷ kích hoạt dữ liệu được lưu trữ cho một nguồn gốc. Bao gồm bộ nhớ cơ sở dữ liệu, AppCache, cookie, localStorage và nội dung trong FileSystem API. Tuy nhiên, hãy cảnh báo trước, đó là tất cả hoặc không có gì. Bạn không thể xoá chỉ một tệp hoặc một phần dữ liệu.

  5. Đừng quên các lệnh gọi lại lỗi. Filesystem API hoạt động trong môi trường không đồng bộ (trừ phi bạn sử dụng phiên bản đồng bộ hoá trong Worker). Luôn sử dụng lệnh gọi lại lỗi trong lệnh gọi API. Không bắt buộc, nhưng sau này bạn sẽ tránh được sự đau buồn khi mọi thứ nổ tung.