Artık, izinleri tekrar tekrar vermek zorunda kalmadan dosya ve klasörlere kalıcı okuma ve yazma erişimi elde edebilirsiniz. Bu gönderide, bu özelliğin işleyiş şekli açıklanmaktadır. Ayrıntılara geçmeden önce, mevcut durumun ve çözülmekte olan sorunun kısa bir özetini verelim.
Mevcut yöntemle ilgili zorluklar
File System Access API, geliştiricilerin kullanıcının yerel sabit diskindeki dosyalara okuma ve (isteğe bağlı olarak) yazma şeklinde erişmesine olanak tanır. Bu API'yi kullanan popüler uygulamalardan biri (birçok uygulama arasında) Microsoft'un doğrudan tarayıcıda çalışan IDE'si Visual Studio Code'dur (VS Code). VS Code'u açtığınızda yeni dosya oluşturabileceğiniz veya mevcut bir dosyayı ya da klasörü açabileceğiniz bir Hoş geldiniz ekranıyla karşılaşırsınız.
Klasörü Aç'ı tıklayıp sabit diskinizdeki klasörlerden birini seçerseniz tarayıcı, VS Code'un bu klasöre görüntüleme erişimi olmasını isteyip istemediğinizi sorar.
Erişim izni verdikten sonra klasör hiyerarşisinde gezinebilir ve VS Code'un düzenleyicisinde dosyaları açabilirsiniz. Dosyalardan herhangi birinde değişiklik yaparsanız tarayıcı, klasöre düzenleme erişimi vermek isteyip istemediğinizi sorar.
Buna izin verirseniz adres çubuğundaki dosya simgesi değişir ve uygulamanın okuma ve yazma izinlerinin olduğunu belirten küçük bir aşağı ok eklenir. İzinleri değiştirmek için simgeyi ve ardından Erişimi kaldır'ı tıklayın. Böylece uygulama artık dosyaları düzenleyemez.
Erişim, kaynağın son sekmesini kapatana kadar devam eder. Ardından uygulamayı kapatıp tekrar açarsanız VS Code bir bakıma kaldığınız yerden devam etmenize olanak tanır. En Son Açılanları Aç'ı tıkladığınızda VS Code, daha önce açılmış klasörü yeniden açma seçeneği sunar.
Ancak daha önce klasöre yazma izni vermiş olsanız bile artık tekrar erişim izni vermeniz gerekir. Bu durum çok çabuk yorucu hale gelir. Çözüme, yani File System Access API için kalıcı izinlere geçmeden önce VS Code'un son klasörleri nasıl hatırladığını inceleyelim.
File System Access API'de dosya ve klasörlere erişim, FileSystemHandle
nesneleri aracılığıyla yönetilir: FileSystemFileHandle
dosyalar için nesneler ve FileSystemDirectoryHandle
klasörler (dizinler) için nesneler. Her ikisi de IndexedDB'de depolanabilir ve VS Code tam olarak bunu yapar. Bunu görmek için Chrome DevTools'u açın, Uygulama sekmesinde IndexedDB bölümüne gidin ve vscode-web-db
veritabanında ilgili tabloyu vscode-filehandles-store
seçin.
Yeni yöntem: Neler değişiyor ve ne zaman?
Chrome, kullanıcıların dosya ve klasörlerine isteğe bağlı olarak kalıcı erişim izni vermesine olanak tanıyan yeni bir davranışı kullanıma sunuyor. Bu sayede kullanıcıdan sürekli olarak yeniden istem alınması gerekmiyor.
Yeni davranış, Chrome 122'den itibaren gözlemlenebilir. Bu özelliği daha erken test etmek için Chrome 120'den itibaren chrome://flags/#file-system-access-persistent-permission
ve chrome://flags/#one-time-permission
işaretçilerini Etkin olarak değiştirin.
Öncelikle yeni davranış, kullanıcıların isteğe bağlı olarak her ziyarette uygulamalara seçili dosya ve klasörlere erişim izni vermesine olanak tanıyan yeni bir üç yönlü izin isteminden oluşur.
Bu yeni üç yönlü istemde aşağıdaki seçenekler bulunur:
- Bu sefer izin ver: Uygulamanın, geçerli oturumdaki dosyalara erişmesine izin verir. (Bu, mevcut davranışa karşılık gelir.)
- Her ziyarette izin ver: Erişim iptal edilmediği sürece uygulamanın süresiz erişmesine izin verir. Uygulamaya kalıcı erişim izni verildikten sonra yeni açılan dosya ve klasörlere de kalıcı olarak erişilebilir.
- İzin verme: Uygulamanın dosyalara erişmesine izin vermez. (Bu, mevcut davranışa karşılık gelir.)
İkinci olarak, yeni davranış, site ayarlarında yeni bir bölüm içerir. Kullanıcılar, Dosya düzenleme açma/kapatma düğmesinin yanındaki başlatma simgesinden bu bölüme ulaşabilir.
Bu başlatma simgesi tıklandığında, söz konusu uygulamanın Gizlilik ve güvenlik ayarları açılır. Burada kullanıcı, uygulamanın erişebildiği tüm dosya ve klasörlerin öğe listesini görür. Erişim, çöp kutusu simgesini tıklayarak öğe bazında iptal edilebilir. Öğe başına erişimi kaldırmak, uygulamaya genel olarak dosyalara erişim izni verilebileceği anlamına gelir. Kullanıcı, genel olarak erişimi iptal etmek için daha önce açıklandığı gibi adres çubuğundaki simgeyi tıklayabilir.
Yeni davranışı tetikleme
File System Access API'de geliştiricilere yönelik herhangi bir değişiklik yoktur. Kalıcı izinlerle yeni davranışı tetiklemek için farklı ön koşulların karşılanması gereken üç yöntem vardır:
- Kullanıcı, bir kaynağa yapılan son ziyaret sırasında bir dosya veya klasör (veya birden fazla dosya ya da klasör) için izin vermiş olmalıdır ve uygulama, ilgili
FileSystemHandle
nesnelerini IndexedDB'de depolamalıdır. Uygulama, kaynağa yapılan bir sonraki ziyarette IndexedDB'den saklananFileSystemHandle
nesnelerinden birini almış ve ardındanFileSystemHandle.requestPermission()
yöntemini çağırmış olmalıdır. Bu ön koşullar karşılanırsa yeni üç yönlü istem gösterilir. - Kaynak, daha önce erişimi verilmiş ancak sekme bir süre arka planda olduğu için erişimi otomatik olarak iptal edilmiş bir
FileSystemHandle
üzerindeFileSystemHandle.requestPermission()
yöntemini çağırmış olmalıdır. (Otomatik izin iptal işlemi, Chrome'da tek seferlik izinler başlıklı makalede açıklanan mantıkla çalışır.) Bu ön koşullar karşılanırsa yeni üç yönlü istem gösterilir. - Kullanıcı uygulamayı yüklemiş olmalıdır. Yüklenen uygulamalar, kullanıcı erişim izni verdikten sonra izinleri otomatik olarak korur. Bu durumda üç yönlü istem gösterilmez, bunun yerine uygulama varsayılan olarak yeni davranışı alır.
İlk ve ikinci durumda istem, yalnızca requestPermission()
yönteminin çağrıldığı FileSystemHandle
nesneyi değil, uygulamanın daha önce eriştiği tüm FileSystemHandle
nesneleri listeler. Tek seferlik izinlerde işleyiş şekline uygun olarak, kullanıcı istemi üçten fazla kez reddederse veya kapatırsa istem artık tetiklenmez ve bunun yerine normal izin istemi gösterilir.
Yeni davranışı deneyin
Desteklenen bir Chrome sürümüne sahipseniz veya gerekli işaretçileri ayarladıysanız web'de VS Code'da yeni davranışı test edebilirsiniz. Bir klasörü açıp erişim izni verin, ardından sekmeyi kapatıp yeniden açın ve Son açtığımı aç'ı tıklayın (istemin tetiklenmesi için hemen yeniden yüklemenin işe yaramadığını, tüm sekmelerin kapatılması gerektiğini unutmayın). Önceki klasörü seçtiğinizde yeni istem gösterilir. Daha basit bir test durumu için Kalıcı Dosya Sistemi Erişimi demosuna göz atın ve kaynak koduna göz atın.
Sonuçlar
File System Access API için kalıcı izinler, API'nin en çok istenen özelliklerinden biridir ve uygulama hatası da birçok geliştiricinin ilgisini çeken popüler bir özelliktir. Bu özelliği geliştiricilerin ve en önemlisi kullanıcıların kullanımına sunarak platforma özel uygulamalara kıyasla önemli bir özellik açığını kapattık.
Tasdik
Bu yayın Christine Hollingsworth, Austin Sullivan ve Rachel Andrew tarafından incelendi.