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 membahas detailnya, mari kita rangkum secara singkat status quo dan masalah yang sedang diselesaikan.
Tantangan dengan metode saat ini
File System Access API memungkinkan developer mengakses file di hard disk lokal pengguna untuk membaca dan (opsional) menulis. Salah satu aplikasi populer (di antara banyak aplikasi 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 Selamat Datang tempat Anda dapat membuat file baru, atau membuka file atau folder yang ada.
Jika Anda mengklik Open Folder dan memilih salah satu folder di hard disk, browser akan menanyakan apakah Anda ingin VS Code memiliki akses lihat ke folder ini.
Setelah memberikan akses, Anda dapat menjelajahi 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 panah bawah kecil 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 berlangsung hingga Anda menutup tab terakhir asal. Jika Anda kemudian menutup aplikasi dan membukanya lagi, VS Code agak memungkinkan Anda melanjutkan dari tempat Anda berhenti. Saat mengklik Open Recent, VS Code menawarkan folder yang sebelumnya dibuka untuk dibuka kembali.
Namun, meskipun Anda telah memberikan izin tulis ke folder sebelumnya, Anda kini perlu memberikan akses lagi. Hal ini akan sangat melelahkan. Sebelum mempelajari solusinya, yaitu izin persisten untuk File System Access API, bagaimana VS Code dapat mengingat folder terbaru?
Di File System Access API, akses ke file dan folder dikelola melalui objek
FileSystemHandle
:
FileSystemFileHandle
objek untuk file, dan
FileSystemDirectoryHandle
objek 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 yang relevan vscode-filehandles-store
di database vscode-web-db
.
Cara baru: apa yang berubah dan kapan
Chrome meluncurkan perilaku baru untuk memungkinkan pengguna memberikan akses permanen secara opsional ke file dan folder mereka, sehingga tidak perlu terus-menerus meminta ulang izin pengguna.
Perilaku baru ini dapat diamati mulai Chrome 122. Untuk mengujinya lebih awal, mulai
dari Chrome 120, aktifkan dua tanda
chrome://flags/#file-system-access-persistent-permission
dan
chrome://flags/#one-time-permission
ke Diaktifkan.
Pertama, perilaku baru ini terdiri dari dialog izin tiga arah baru yang secara opsional memungkinkan pengguna memberikan akses aplikasi ke file dan folder yang dipilih pada setiap kunjungan.
Perintah 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 pada setiap kunjungan: Mengizinkan aplikasi memiliki akses tanpa batas kecuali akses 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 ini memerlukan bagian baru di setelan situs, yang dapat diakses pengguna melalui ikon peluncuran di samping tombol Pengeditan file.
Ikon peluncuran ini, saat diklik, 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 terlihat oleh developer pada File System Access API. Untuk memicu perilaku baru dengan izin persisten, ada tiga cara dengan prasyarat berbeda yang harus dipenuhi:
- Pengguna harus telah memberikan izin ke file atau folder (atau beberapa file atau folder) selama kunjungan terakhir ke origin dan aplikasi harus telah menyimpan objek
FileSystemHandle
yang sesuai di IndexedDB. Saat kunjungan berikutnya ke origin, aplikasi harus telah mengambil salah satu objekFileSystemHandle
yang disimpan dari IndexedDB, lalu memanggil metodeFileSystemHandle.requestPermission()
-nya. Jika prasyarat ini terpenuhi, dialog tiga arah baru akan ditampilkan. - Asal harus memanggil metode
FileSystemHandle.requestPermission()
padaFileSystemHandle
yang aksesnya telah diberikan sebelumnya, tetapi aksesnya telah dicabut secara otomatis karena tab dialihkan ke latar belakang selama beberapa waktu. (Pencabutan izin otomatis berfungsi berdasarkan logika yang sama seperti yang dijelaskan dalam artikel Izin sekali pakai di Chrome.) Jika prasyarat ini terpenuhi, dialog tiga arah baru akan ditampilkan. - Pengguna harus telah menginstal aplikasi. Aplikasi yang diinstal akan otomatis mempertahankan izin setelah pengguna memberikan akses. Dalam hal ini, dialog tiga arah tidak akan ditampilkan, tetapi aplikasi akan mendapatkan perilaku baru secara default.
Dalam kasus pertama dan kedua, perintah mencantumkan semua objek FileSystemHandle
yang sebelumnya diakses aplikasi, bukan hanya objek yang metode requestPermission()
-nya sedang dipanggil. Sejalan dengan
cara kerjanya dalam izin sekali pakai,
jika pengguna menolak atau menutup dialog lebih dari tiga kali, dialog tidak akan
lagi dipicu, dan sebagai gantinya, dialog izin reguler akan ditampilkan.
Mencoba perilaku baru
Jika Anda memiliki Chrome versi yang mendukung atau telah menyetel tanda yang diperlukan, Anda dapat menguji perilaku baru di VS Code di web. Buka folder dan berikan akses, lalu tutup tab dan buka kembali, lalu klik Buka terbaru (perhatikan bahwa pemuatan ulang langsung tidak berfungsi untuk memicu perintah, semua tab harus ditutup). Pilih folder sebelumnya dan perintah baru akan muncul.
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 menandainya. Dengan menghadirkan fitur ini ke tangan developer, dan terutama, ke tangan pengguna, kesenjangan fitur penting dibandingkan dengan aplikasi khusus platform kini telah ditutup.
Ucapan terima kasih
Postingan ini ditinjau oleh Christine Hollingsworth, Austin Sullivan, dan Rachel Andrew.