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.
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.
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.
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.
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.
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?
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
.
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.
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.
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.
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:
- 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 objekFileSystemHandle
yang disimpan dari IndexedDB, lalu memanggil metodeFileSystemHandle.requestPermission()
. Jika prasyarat ini terpenuhi, perintah tiga arah baru akan ditampilkan. - Asal harus sudah memanggil metode
FileSystemHandle.requestPermission()
padaFileSystemHandle
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. - 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.