Artık dosya ve klasörlere kalıcı okuma ve yazma erişimi elde etmek için izinleri tekrar tekrar vermeniz gerekmiyor. Bu gönderide, özelliğin işleyiş şekli açıklanmaktadır. Ayrıntılara girmeden önce mevcut durumun ve çözülen sorunun kısa bir özeti.
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 (diğerlerinin yanı sıra) doğrudan tarayıcıda çalışan Microsoft'un IDE'si Visual Studio Code'dur (VS Code). VS Code'u açtığınızda yeni bir dosya oluşturabileceğiniz veya mevcut bir dosyayı ya da klasörü açabileceğiniz bir Hoş geldiniz ekranı gösterilir.
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şimine sahip olmasını isteyip istemediğinizi sorar.
Erişim izni verdikten sonra klasör hiyerarşisinde gezinebilir ve dosyaları VS Code'un düzenleyicisinde 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 izinlerine sahip 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. Uygulamayı kapatıp tekrar açtığınızda VS Code, kaldığınız yerden devam etmenize olanak tanır. Son Açılanı Aç'ı tıkladığınızda VS Code, daha önce açılan klasörü yeniden açmanızı sağlar.
Klasöre daha önce yazma izni vermiş olsanız bile şimdi 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ı açıklayalım.
File System Access API'de dosya ve klasörlere erişim, FileSystemHandle
nesneleri aracılığıyla yönetilir: dosyalar için FileSystemFileHandle
nesneleri ve klasörler (dizinler) için FileSystemDirectoryHandle
nesneleri. Her ikisi de IndexedDB'de depolanabilir ve VS Code tam olarak bunu yapar. Bunu görmek için Chrome DevTools'u açın, Application (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 dosyalarına ve klasörlerine kalıcı erişim izni vermesine olanak tanıyan yeni bir davranış başlatıyor. Bu sayede, kullanıcıya sürekli olarak yeniden istem gönderme ihtiyacı ortadan kalkıyor.
Yeni davranış, Chrome 122'den itibaren gözlemlenebilir. Bu özelliği daha önce test etmek için Chrome 120'den itibaren chrome://flags/#file-system-access-persistent-permission
ve chrome://flags/#one-time-permission
adlı iki işareti Etkin olarak değiştirin.
Yeni davranış, kullanıcıların her ziyaretlerinde 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, mevcut 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 uygulamaya süresiz erişim izni 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 verilmez. (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 bu bölüme Dosya düzenleme açma/kapatma düğmesinin yanındaki başlatma simgesinden ulaşabilir.
Bu başlatma simgesi tıklandığında, söz konusu uygulamanın Gizlilik ve güvenlik ayarları açılır. Kullanıcı, uygulamanın erişebildiği tüm dosya ve klasörlerin öğe listesini görür. Çöp kutusu simgesini tıklayarak erişimi öğe bazında iptal edebilirsiniz. Erişimi öğe bazında kaldırdığınızda uygulamaya genel olarak dosyalara erişim izni verilebilir. Erişimi genel olarak iptal etmek için kullanıcı, daha önce açıklandığı gibi adres çubuğundaki simgeyi tıklayabilir.
Yeni davranış nasıl tetiklenir?
File System Access API'de geliştiricilere yönelik herhangi bir değişiklik yapılmamıştır. Kalıcı izinlerle yeni davranışı tetiklemek için farklı ön koşulların karşılanması gereken üç yöntem vardır:
- Kullanıcı, son ziyarette bir dosya veya klasör (ya da birden fazla dosya veya klasör) için izin vermiş olmalı ve uygulama, ilgili
FileSystemHandle
nesnelerini IndexedDB'de saklamış olmalıdır. Uygulama, kaynağa bir sonraki ziyarette IndexedDB'den depolanmışFileSystemHandle
nesnelerden herhangi birini almalı ve ardındanFileSystemHandle.requestPermission()
yöntemini çağırmalıdır. Bu ön koşullar karşılanırsa yeni üç yönlü istem gösterilir. - Kaynak, daha önce erişim izni verilen ancak sekme bir süredir arka planda kaldığı için erişimi otomatik olarak iptal edilen bir
FileSystemHandle
üzerindeFileSystemHandle.requestPermission()
yöntemini çağırmış olmalıdır. (Otomatik izin iptali, Chrome'da tek seferlik izinler başlıklı makalede açıklanan mantıkla aynı şekilde ç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 verdiğinde izinleri otomatik olarak kalıcı hale getirir. Bu durumda, üç yönlü istem gösterilmez. Bunun yerine uygulama, yeni davranışı varsayılan olarak alır.
İlk ve ikinci durumda istem, yalnızca requestPermission()
yöntemi için çağrılan değil, uygulamanın daha önce eriştiği tüm FileSystemHandle
nesnelerini listeler. Tek seferlik izinlerdeki işleyiş şekline uygun olarak, kullanıcı istemi üçten fazla kez reddeder veya kapatırsa istem artık tetiklenmez ve bunun yerine normal izin istemi gösterilir.
Yeni davranışı deneyin
Chrome'un desteklenen bir sürümünü kullanıyorsanız veya gerekli işaretleri 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 kullanılanı aç'ı tıklayın (istem tetiklenmesi için anında yeniden yüklemenin çalışmadığını, tüm sekmelerin kapatılması gerektiğini unutmayın). Önceki klasörü seçtiğinizde yeni istem gösterilir.
Sonuçlar
File System Access API için kalıcı izinler, API'nin en çok istenen özelliklerinden biridir. Uygulama hatası da birçok geliştirici tarafından yıldızlanarak büyük ilgi görmektedir. 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ı kapatıyoruz.
Teşekkür
Bu yayın Christine Hollingsworth, Austin Sullivan ve Rachel Andrew tarafından incelenmiştir.