Izin persisten untuk File System Access API

Sekarang ada cara untuk mendapatkan akses baca dan tulis yang persisten ke file dan folder tanpa harus memberikan izin berulang kali. Postingan ini menjelaskan cara kerjanya. Sebelum masuk ke detailnya, rekap status quo dan masalah yang dipecahkan.

Tantangan dengan metode saat ini

Dengan File System Access API, developer dapat mengakses file di hard disk lokal pengguna dengan cara membaca dan (opsional) menulis. Salah satu aplikasi populer (di antara banyak lainnya) yang menggunakan API ini adalah Visual Studio Code (VS Code), IDE Microsoft yang berjalan langsung di browser. Saat membuka VS Code, Anda akan melihat layar Welcome untuk membuat file baru, atau membuka file atau folder yang sudah ada.

Layar sambutan Visual Studio Code.

Jika Anda mengklik Open Folder dan memilih salah satu folder di hard disk, browser akan menanyakan apakah Anda ingin VS Code memiliki akses view ke folder ini.

Visual Studio Code meminta akses lihat.

Setelah memberikan akses, Anda dapat melihat hierarki folder dan membuka file di editor VS Code. Jika Anda mengubah salah satu file, browser akan menanyakan apakah Anda ingin memberikan akses edit ke folder tersebut.

Visual Studio Code meminta akses edit.

Jika Anda mengizinkannya, ikon file di kolom URL akan berubah, dan sedikit panah bawah akan ditambahkan, yang menunjukkan bahwa aplikasi memiliki izin baca dan tulis. Untuk mengubah izin, klik ikon lalu Hapus akses, sehingga aplikasi tidak dapat lagi mengedit file.

Visual Studio Code dengan prompt ikon kolom URL.

Akses akan berlaku hingga Anda menutup tab terakhir origin. Jika Anda kemudian menutup aplikasi dan membukanya lagi, VS Code seperti memungkinkan Anda melanjutkan dari bagian terakhir yang Anda tinggalkan. Saat mengklik Open Recent, VS Code akan menawarkan folder yang telah dibuka sebelumnya untuk dibuka kembali.

Visual Studio Code menawarkan file yang terakhir dibuka.

Namun, meskipun sebelumnya Anda telah memberikan izin tulis ke folder tersebut, kini Anda harus memberikan akses lagi. Ini sangat melelahkan. Sebelum memulai solusi ini, yaitu izin persisten untuk File System Access API, bagaimana cara VS Code mengingat folder terbaru?

Visual Studio Code meminta akses edit setelah dimuat ulang.

Di File System Access API, akses ke file dan folder dikelola melalui objek FileSystemHandle: objek FileSystemFileHandle untuk file, dan objek FileSystemDirectoryHandle untuk folder (direktori). Keduanya dapat disimpan di IndexedDB, dan inilah yang dilakukan VS Code. Anda dapat melihatnya dengan membuka Chrome DevTools, di tab Application, buka bagian IndexedDB, lalu pilih tabel vscode-filehandles-store yang relevan dalam database vscode-web-db.

Chrome DevTools men-debug Kode Visual Studio yang menampilkan bagian IndexedDB dengan FileSystemHandle yang tersimpan.

Cara baru: apa yang berubah dan kapan

Chrome meluncurkan perilaku baru yang memungkinkan pengguna memberikan akses permanen secara opsional ke file dan folder mereka, sehingga pengguna tidak perlu meminta ulang pengguna secara terus-menerus. Perilaku baru ini dapat diamati mulai Chrome 122. Untuk mengujinya lebih awal, mulai dari Chrome 120, alihkan kedua flag chrome://flags/#file-system-access-persistent-permission dan chrome://flags/#one-time-permission ke Enabled.

Pertama, perilaku baru ini terdiri dari permintaan izin tiga arah baru yang secara opsional memungkinkan pengguna memberi aplikasi akses ke file dan folder yang dipilih pada setiap kunjungan.

Visual Studio Code dengan prompt izin tiga arah.

Dialog tiga arah baru ini memiliki opsi berikut:

  • Izinkan kali ini: Mengizinkan aplikasi memiliki akses ke file untuk sesi saat ini. (Hal ini sesuai dengan perilaku yang ada.)
  • Izinkan di setiap kunjungan: Mengizinkan aplikasi untuk memiliki akses tanpa batas, kecuali jika aksesnya dicabut. Setelah aplikasi diberi akses persisten, file dan folder yang baru dibuka juga akan dapat diakses secara persisten.
  • Jangan izinkan: Tidak mengizinkan aplikasi memiliki akses ke file. (Hal ini sesuai dengan perilaku yang ada.)

Kedua, perilaku baru memerlukan bagian baru di setelan situs, yang dapat diakses pengguna melalui ikon peluncuran di samping tombol Pengeditan file.

Setelan situs Visual Studio Code dengan ikon pengeditan file.

Saat diklik, ikon peluncuran ini akan membuka setelan Privasi dan keamanan untuk aplikasi yang dimaksud tempat pengguna melihat daftar item untuk semua file dan folder yang dapat diakses aplikasi. Akses dapat dicabut per item dengan mengklik ikon tempat sampah. Menghapus akses per item berarti aplikasi masih dapat diberi akses ke file secara umum. Untuk mencabut akses secara umum, pengguna dapat mengklik ikon di kolom URL, seperti yang dijelaskan sebelumnya.

Setelan privasi dan keamanan Chrome untuk situs vscode.dev.

Cara memicu perilaku baru

Tidak ada perubahan yang diterapkan oleh developer pada File System Access API. Untuk memicu perilaku baru dengan izin persisten, ada tiga cara dengan prakondisi berbeda yang perlu dipenuhi:

  1. Pengguna harus sudah memberikan izin ke file atau folder (atau beberapa file atau folder) selama kunjungan terakhir ke asal dan aplikasi harus menyimpan objek FileSystemHandle yang sesuai di IndexedDB. Saat kunjungan berikutnya ke asal, aplikasi harus telah mengambil salah satu objek FileSystemHandle yang disimpan dari IndexedDB, lalu memanggil metode FileSystemHandle.requestPermission(). Jika prasyarat ini terpenuhi, perintah tiga arah baru akan ditampilkan.
  2. Asal harus sudah memanggil metode FileSystemHandle.requestPermission() pada FileSystemHandle yang telah diberi akses, tetapi yang aksesnya telah dicabut secara otomatis karena tab tersebut berada di latar belakang untuk sementara waktu. (Pencabutan izin otomatis berfungsi berdasarkan logika yang sama seperti yang dijelaskan dalam artikel Izin satu kali di Chrome.) Jika prasyarat ini terpenuhi, perintah tiga arah baru akan ditampilkan.
  3. Pengguna harus sudah menginstal aplikasi. Aplikasi terinstal akan otomatis mempertahankan izin setelah pengguna memberikan akses. Dalam hal ini, perintah tiga arah tidak akan ditampilkan, tetapi aplikasi mendapatkan perilaku baru secara default.

Di kasus pertama dan kedua, perintah tersebut mencantumkan semua objek FileSystemHandle yang sebelumnya dapat diakses aplikasi, bukan hanya objek yang metode requestPermission() dipanggil. Sesuai dengan cara kerjanya dalam izin satu kali, jika pengguna menolak atau menolak perintah lebih dari tiga kali, tindakan tersebut tidak akan terpicu lagi, dan sebagai gantinya, prompt izin reguler akan ditampilkan.

Coba perilaku baru

Jika Anda memiliki versi Chrome yang didukung atau telah menetapkan tanda yang diperlukan, Anda dapat menguji perilaku baru ini dalam VS Code di web. Buka folder dan berikan akses, lalu tutup tab dan buka kembali dan klik Open recent (perlu diperhatikan bahwa pemuatan ulang langsung tidak berfungsi untuk memicu perintah, semua tab harus ditutup). Pilih folder sebelumnya dan perintah baru akan ditampilkan. Untuk kasus pengujian yang lebih sedikit, lihat demo Persistent File System Access dan lihat kode sumbernya.

Kesimpulan

Izin persisten untuk File System Access API adalah salah satu fitur yang paling banyak diminta dari API, dan bug implementasi juga sangat populer, dengan banyak developer yang membintanginya. Dengan menghadirkan fitur ini ke tangan developer, dan yang terutama, oleh pengguna, kesenjangan fitur yang penting dibandingkan dengan aplikasi khusus platform kini ditutup.

Ucapan terima kasih

Postingan ini ditinjau oleh Christine Hollingsworth, Austin Sullivan, dan Rachel Andrew.