Hệ thống tệp HTML5 là một API mạnh mẽ. Cùng với sức mạnh là sự phức tạp. Càng phức tạp thì càng khó gỡ lỗi. Rất tiếc, DevTools của Chrome hiện không hỗ trợ Filesystem API. Điều này khiến việc gỡ lỗi trở nên khó khăn hơn mức cần thiết. Khi nói khó, tôi muốn nói đến việc bạn phải viết mã để liệt kê/xoá tệp trong hệ thống tệp.
Trong quá trình nỗ lực sử dụng API Hệ thống tệp, tôi đã học được một số mẹo mà tôi muốn chia sẻ với bạn. Mỗi mẹo đều có những hạn chế riêng, nhưng việc kết hợp các mẹo này sẽ giúp bạn đạt được 90% mục tiêu. Sau đây là 5 loại nhà hàng được yêu thích nhất:
Đảm bảo bạn không chạy từ
file://
. Đây là một lỗi ẩn mà nhiều người gặp phải. Chrome áp dụng các hạn chế bảo mật lớn đối vớifile://
. Nhiều API tệp nâng cao (BlobBuilder
,FileReader
, API hệ thống tệp, v.v.) sẽ gửi lỗi hoặc không thành công nếu bạn chạy ứng dụng cục bộ từfile://
. Nếu bạn 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 quy định hạn chế bảo mật này. Chỉ sử dụng cờ này cho mục đích thử nghiệm.SECURITY_ERR
hoặcQUOTA_EXCEEDED_ERR
đáng sợ. Điều này thường xảy ra khi bạn cố gắng ghi dữ liệu nhưng bị ảnh hưởng bởi trường hợp #1. Nếu không phải vậy, thì có thể bạn không có hạn mức. Có hai loại hạn mức mà hệ thống tệp có thể mở, đó làTEMPORARY
hoặcPERSISTENT
. Nếu bạn đang sử dụng loại bộ nhớ sau, người dùng cần cấp quyền bộ nhớ cố định cho ứng dụng của bạn một cách rõ ràng. Hãy xem bài đăng này để biết cách thực hiện việc đó.URL
filesystem:
FTW. Bạn có thể mở URLfilesystem:
choDirectoryEntry
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ênwww.example.com
, hãy mởfilesystem:http://www.example.com/temporary/
trong một thẻ mới. Chrome sẽ hiển thị danh sách chỉ có thể đọc các tệp/thư mục được lưu trữ ở nguồn gốc ứng dụng của bạn. Để biết thêm thông tin về URLfilesystem:
, hãy xem https://www.html5rocks.com/en/tutorials/file/filesystem/#toc-filesystemurls.chrome://settings/cookies
là bạn của bạn. Trang này cho phép bạn xoá sạch 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à các nội dung trong API FileSystem. Tuy nhiên, hãy lưu ý rằng đây là một tính năng toàn bộ hoặc không có gì. Bạn không thể chỉ xoá một tệp hoặc một phần dữ liệu.Đừng quên lệnh gọi lại lỗi. Filesystem API hoạt động trong một thế giới không đồng bộ (trừ phi bạn đang 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. Bạn không bắt buộc phải làm việc này, nhưng sau này khi mọi thứ bùng nổ, bạn sẽ phải tốn nhiều công sức để khắc phục.