Quyền lâu dài cho API Truy cập hệ thống tệp

Giờ đây, bạn có thể có quyền đọc và ghi liên tục vào các tệp và thư mục mà không cần cấp quyền nhiều lần. Bài đăng này giải thích cách hoạt động của tính năng này. Trước khi đi sâu vào chi tiết, hãy tóm tắt nhanh về tình trạng hiện tại và vấn đề đang được giải quyết.

Thách thức với phương thức hiện tại

File System Access API (API truy cập hệ thống tệp) cho phép nhà phát triển truy cập vào các tệp trên ổ đĩa cứng cục bộ của người dùng theo cách đọc và ghi (không bắt buộc). Một ứng dụng phổ biến (trong số nhiều ứng dụng khác) sử dụng API này là Visual Studio Code (VS Code), IDE của Microsoft chạy trực tiếp trong trình duyệt. Khi mở VS Code, bạn sẽ thấy màn hình Welcome (Chào mừng) để tạo tệp mới hoặc mở tệp hoặc thư mục hiện có.

Màn hình chào mừng của Visual Studio Code.

Nếu bạn nhấp vào Open Folder (Mở thư mục) rồi chọn một trong các thư mục trên ổ đĩa cứng, trình duyệt sẽ hỏi bạn xem bạn có muốn VS Code có quyền xem thư mục này hay không.

Visual Studio Code yêu cầu quyền xem.

Sau khi cấp quyền truy cập, bạn có thể điều hướng hệ phân cấp thư mục và mở các tệp trong trình chỉnh sửa của VS Code. Nếu bạn sửa đổi bất kỳ tệp nào, trình duyệt sẽ hỏi bạn có muốn cấp quyền chỉnh sửa vào thư mục đó hay không.

Visual Studio Code yêu cầu quyền chỉnh sửa.

Nếu bạn cho phép, biểu tượng tệp trong thanh địa chỉ sẽ thay đổi và một mũi tên xuống nhỏ sẽ được thêm vào, cho biết ứng dụng có quyền đọc và ghi. Để thay đổi quyền, hãy nhấp vào biểu tượng rồi nhấp vào Xoá quyền truy cập để ứng dụng không thể chỉnh sửa tệp nữa.

Visual Studio Code với lời nhắc biểu tượng thanh địa chỉ.

Quyền truy cập sẽ kéo dài cho đến khi bạn đóng thẻ cuối cùng của nguồn gốc. Sau đó, nếu bạn đóng ứng dụng rồi mở lại, VS Code có thể cho phép bạn tiếp tục từ nơi bạn đã dừng lại. Khi nhấp vào Open Recent (Mở gần đây), VS Code sẽ cung cấp thư mục đã mở trước đó để mở lại.

Visual Studio Code cung cấp các tệp đã mở gần đây nhất.

Tuy nhiên, ngay cả khi đã cấp quyền ghi vào thư mục trước đó, giờ đây, bạn vẫn cần cấp lại quyền truy cập. Việc này sẽ khiến bạn nhanh chóng mệt mỏi. Trước khi đi sâu vào giải pháp, tức là các quyền ổn định cho API Truy cập hệ thống tệp, làm cách nào để VS Code ghi nhớ các thư mục gần đây?

Visual Studio Code yêu cầu quyền chỉnh sửa sau khi tải lại.

Trong API Truy cập hệ thống tệp, quyền truy cập vào tệp và thư mục được quản lý thông qua các đối tượng FileSystemHandle: đối tượng FileSystemFileHandle cho tệp và đối tượng FileSystemDirectoryHandle cho thư mục (thư mục). Cả hai đều có thể được lưu trữ trong IndexedDB và đây chính xác là những gì VS Code thực hiện. Bạn có thể xem điều này bằng cách mở Công cụ của Chrome cho nhà phát triển, trên thẻ Application (Ứng dụng), hãy chuyển đến phần IndexedDB và chọn bảng vscode-filehandles-store có liên quan trong cơ sở dữ liệu vscode-web-db.

Công cụ của Chrome cho nhà phát triển gỡ lỗi Visual Studio Code hiển thị phần IndexedDB với FileSystemHandle được lưu trữ.

Phương thức mới: nội dung thay đổi và thời điểm thay đổi

Chrome sẽ ra mắt một hành vi mới để cho phép người dùng cấp quyền truy cập vĩnh viễn vào các tệp và thư mục của họ (không bắt buộc), nhờ đó không cần phải liên tục nhắc người dùng. Bạn có thể quan sát hành vi mới kể từ Chrome 122. Để kiểm thử sớm hơn, bắt đầu từ Chrome 120, hãy bật/tắt hai cờ chrome://flags/#file-system-access-persistent-permissionchrome://flags/#one-time-permission thành Bật.

Thứ nhất, hành vi mới bao gồm một lời nhắc cấp quyền ba chiều mới cho phép người dùng cấp quyền truy cập vào các tệp và thư mục đã chọn cho ứng dụng trong mỗi lượt truy cập (không bắt buộc).

Visual Studio Code với lời nhắc cấp quyền ba chiều.

Lời nhắc ba chiều mới này có các lựa chọn sau:

  • Cho phép lần này: Cho phép ứng dụng truy cập vào các tệp cho phiên hiện tại. (Điều này tương ứng với hành vi hiện có.)
  • Cho phép mỗi khi truy cập: Cho phép ứng dụng có quyền truy cập vô thời hạn, trừ phi quyền truy cập bị thu hồi. Sau khi ứng dụng được cấp quyền truy cập liên tục, bạn cũng có thể truy cập liên tục vào các tệp và thư mục mới mở.
  • Không cho phép: Không cho phép ứng dụng truy cập vào tệp. (Điều này tương ứng với hành vi hiện có.)

Thứ hai, hành vi mới này liên quan đến một phần mới trong phần cài đặt trang web mà người dùng có thể truy cập thông qua biểu tượng khởi chạy bên cạnh nút bật/tắt Chỉnh sửa tệp.

Chế độ cài đặt trang web Visual Studio Code có biểu tượng chỉnh sửa tệp.

Khi nhấp vào biểu tượng khởi chạy này, người dùng sẽ thấy danh sách các mục cho tất cả tệp và thư mục mà ứng dụng có quyền truy cập trong phần cài đặt Quyền riêng tư và bảo mật của ứng dụng có liên quan. Bạn có thể thu hồi quyền truy cập cho từng mục bằng cách nhấp vào biểu tượng thùng rác. Việc xoá quyền truy cập cho từng mục có nghĩa là ứng dụng vẫn có thể được cấp quyền truy cập vào các tệp nói chung. Nhìn chung, để thu hồi quyền truy cập, người dùng có thể nhấp vào biểu tượng trong thanh địa chỉ, như mô tả trước đó.

Chế độ cài đặt về quyền riêng tư và bảo mật của Chrome cho trang web vscode.dev.

Cách kích hoạt hành vi mới

Không có thay đổi nào đối với API Truy cập hệ thống tệp mà nhà phát triển cần quan tâm. Để kích hoạt hành vi mới bằng các quyền ổn định, có 3 cách với các điều kiện tiên quyết khác nhau cần được đáp ứng:

  1. Người dùng phải cấp quyền cho một tệp hoặc thư mục (hoặc nhiều tệp hoặc thư mục) trong lần truy cập gần đây nhất vào một nguồn gốc và ứng dụng phải lưu trữ các đối tượng FileSystemHandle tương ứng trong IndexedDB. Trong lần truy cập tiếp theo vào nguồn gốc, ứng dụng phải truy xuất bất kỳ đối tượng FileSystemHandle nào được lưu trữ từ IndexedDB, sau đó gọi phương thức FileSystemHandle.requestPermission() của đối tượng đó. Nếu các điều kiện tiên quyết này được đáp ứng, thì lời nhắc ba chiều mới sẽ xuất hiện.
  2. Nguồn gốc phải đã gọi phương thức FileSystemHandle.requestPermission() trên một FileSystemHandle mà quyền truy cập đã được cấp trước đó, nhưng quyền truy cập đã bị tự động thu hồi do thẻ chạy ở chế độ nền trong một thời gian. (Quy trình thu hồi quyền tự động hoạt động dựa trên cùng một logic như mô tả trong bài viết Quyền một lần trong Chrome.) Nếu các điều kiện tiên quyết này được đáp ứng, lời nhắc ba chiều mới sẽ xuất hiện.
  3. Người dùng phải cài đặt ứng dụng. Các ứng dụng đã cài đặt sẽ tự động lưu giữ quyền sau khi người dùng cấp quyền truy cập. Trong trường hợp này, lời nhắc ba chiều sẽ không xuất hiện, thay vào đó, ứng dụng sẽ nhận được hành vi mới theo mặc định.

Trong trường hợp thứ nhất và thứ hai, lời nhắc liệt kê tất cả đối tượng FileSystemHandle mà ứng dụng đã có quyền truy cập trước đó, chứ không chỉ đối tượng mà phương thức requestPermission() đang được gọi. Phù hợp với cách hoạt động của lời nhắc trong quyền một lần, nếu người dùng từ chối hoặc đóng lời nhắc nhiều hơn ba lần, thì lời nhắc đó sẽ không kích hoạt nữa và thay vào đó, lời nhắc cấp quyền thông thường sẽ xuất hiện.

Thử hành vi mới

Nếu có phiên bản Chrome hỗ trợ hoặc đã đặt các cờ bắt buộc, bạn có thể kiểm thử hành vi mới trong VS Code trên web. Mở một thư mục và cấp quyền truy cập, sau đó đóng thẻ rồi mở lại thẻ đó và nhấp vào Mở gần đây (lưu ý rằng việc tải lại ngay không hoạt động để kích hoạt lời nhắc, tất cả các thẻ cần phải được đóng). Chọn thư mục trước đó và lời nhắc mới sẽ xuất hiện. Để giảm bớt trường hợp kiểm thử, hãy xem Bản minh hoạ Truy cập hệ thống tệp ổn địnhxem mã nguồn của bản minh hoạ đó.

Kết luận

Quyền truy cập liên tục vào API Hệ thống tệp là một trong những tính năng được yêu cầu nhiều nhất của API và lỗi triển khai cũng rất phổ biến, với nhiều nhà phát triển gắn cờ lỗi này. Bằng cách đưa tính năng này đến với nhà phát triển và quan trọng nhất là người dùng, một khoảng cách quan trọng về tính năng so với các ứng dụng dành riêng cho nền tảng hiện đã được thu hẹp.

Thư cảm ơn

Bài đăng này đã được Christine Hollingsworth, Austin SullivanRachel Andrew xem xét.