Artık tekrar tekrar izin vermek zorunda kalmadan dosya ve klasörlere kalıcı okuma ve yazma erişimi elde etmenin bir yolu var. Bu yayında, özelliğin işleyiş şekli açıklanmaktadır. Ayrıntılara girmeden önce statüko ve çözülürken yaşanan sorunu kısaca özetleyin.
Mevcut yöntemle karşılaşılan zorluklar
File System Access API, geliştiricilerin kullanıcının yerel sabit diskindeki dosyalara okuma ve (isteğe bağlı olarak) yazma yöntemiyle erişmesine olanak tanır. Bu API'yi kullanan birçok popüler uygulama arasında, Microsoft'un doğrudan tarayıcıda çalışan IDE'si Visual Studio Code (VS Code) yer alır. VS Code'u açtığınızda yeni bir dosya oluşturabileceğiniz veya mevcut bir dosyayı ya da klasörü açabileceğiniz Karşılama ekranıyla karşılaşırsınız.
Klasörü Aç'ı tıklar ve sabit diskinizdeki klasörlerden birini seçerseniz tarayıcı, VS Code'un bu klasör için 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, kaynaktaki son sekmeyi kapatana kadar devam eder. Sonra uygulamayı kapatıp tekrar açarsanız, VS Code tür, kaldığınız yerden devam edebilmenizi sağlar. Son Dosyayı Aç'ı tıkladığınızda VS Code, daha önce açılmış olan klasörü yeniden açılmak için sunar.
Ancak daha önce klasöre yazma izni vermiş olsanız bile şimdi tekrar erişim vermeniz gerekir. Bu da çok çabuk yoruyor. Çözümü, yani File System Access API için kalıcı izinleri öğrenmeden önce VS Code, son klasörleri hatırlamayı nasıl başarıyor?
File System Access API'de dosyalara ve klasörlere erişim FileSystemHandle
nesneleri aracılığıyla yönetilir:
FileSystemFileHandle
dosyalar için nesneler ve
FileSystemDirectoryHandle
klasörler (dizinler). Her ikisi de IndexedDB'de depolanabilir. VS Code'un işlevi tam olarak budur. Bunu görmek için Chrome Geliştirici Araçları'nı 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: Nelerin ne zaman değiştiği
Chrome, sürekli olarak kullanıcıdan tekrar izin isteme ihtiyacını ortadan kaldırarak kullanıcıların isteğe bağlı olarak dosya ve klasörlerine kalıcı erişim vermelerine olanak tanıyan yeni bir davranış sunmaktadır.
Bu yeni davranış, Chrome 122 sürümünden itibaren gözlemlenebilir. Özelliği daha önce test etmek için Chrome 120 sürümünden itibaren chrome://flags/#file-system-access-persistent-permission
ve chrome://flags/#one-time-permission
işaretlerini Etkin olarak değiştirin.
Öncelikle, yeni davranış yeni bir üç yönlü izin isteminden oluşur. Bu istemde kullanıcılar isteğe bağlı olarak her ziyarette uygulamalara belirli dosya ve klasörlere erişim izni verebilir.
Bu yeni üç yönlü istemde aşağıdaki seçenekler yer alır:
- Bu defalık izin ver: Uygulamanın, geçerli oturuma ait 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 vermez. (Bu, mevcut davranışa karşılık gelir.)
İkincisi, bu yeni davranış için site ayarlarında yeni bir bölüm söz konusu. Kullanıcılar bu bölüme Dosya düzenleme açma/kapatma düğmesinin yanındaki başlat simgesinden erişebilecek.
Bu başlatma simgesi tıklandığında, söz konusu uygulamanın Gizlilik ve güvenlik ayarları açılır. Burada kullanıcıya, uygulamanın erişebildiği tüm dosyalara ve klasörlere ait öğelerin listesi gösterilir. Erişim, çöp kutusu simgesi tıklanarak öğe bazında iptal edilebilir. Her öğe için erişimi kaldırmak, uygulamaya genel olarak dosyalara erişim izni verilebileceği anlamına gelir. Genel olarak erişimi iptal etmek için kullanıcı, daha önce açıklandığı gibi adres çubuğundaki simgeyi tıklayabilir.
Yeni davranışı tetikleme
File System Access API'de geliştiricilerin karşılaştığı herhangi bir değişiklik yoktur. Kalıcı izinlerle yeni davranışı tetiklemek için karşılanması gereken farklı ön koşulların üç yolu vardır:
- Kullanıcının bir kaynağa son ziyaretinde bir dosyaya veya klasöre (ya da birden çok dosyaya ya da klasöre) izin vermiş olması ve uygulamanın, ilgili
FileSystemHandle
nesnelerini IndexedDB'de depolamış olması gerekir. Kaynak bir sonraki ziyarette, uygulama IndexedDB'den depolananFileSystemHandle
nesnelerinden herhangi 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şim verilen bir
FileSystemHandle
üzerindeFileSystemHandle.requestPermission()
yöntemini çağırmış, ancak sekme bir süredir arka planda kaldığı için erişimi otomatik olarak iptal edilmiş olmalıdır. (Otomatik izin iptali, Chrome'da tek seferlik izinler makalesinde 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. Kullanıcı erişim izni verdikten sonra yüklü uygulamalar izinleri otomatik olarak kullanmaya devam eder. Bu durumda, üç yönlü istem gösterilmez bunun yerine uygulama varsayılan olarak yeni davranışı alır.
Birinci ve ikinci örnekte istem, yalnızca requestPermission()
yönteminin çağrıldığı nesneyi değil, uygulamanın daha önce erişebildiği tüm FileSystemHandle
nesneleri listeler. Tek seferlik izinlerdeki işleyiş şekline uyulduğunda, kullanıcı istemi üç defadan fazla reddeder veya reddederse artık tetiklenmez ve bunun yerine normal izin istemi gösterilir.
Yeni davranışı deneyin
Chrome'un destekleyen bir sürümüne sahipseniz veya gerekli işaretleri ayarladıysanız yeni davranışı web'deki VS Code'da test edebilirsiniz. Bir klasör açıp erişim izni verin, ardından sekmeyi kapatıp yeniden açın ve Şu ankini aç'ı tıklayın (hemen yeniden yüklemenin istemi tetiklemek için çalışmayacağını, tüm sekmelerin kapatılması gerektiğini unutmayın). Önceki klasörü seçtiğinizde yeni komut istemi görüntülenir. Daha düşük 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. Uygulama hatası da son derece popülerdir ve birçok geliştirici bu hataya başlanmıştır. Bu özelliğin geliştiricilerin ve en önemlisi de kullanıcıların ellerine teslim edilmesiyle, platforma özgü uygulamalarla karşılaştırıldığında önemli bir özellik açığı kapatılmıştır.
Tasdik
Bu yayın Christine Hollingsworth, Austin Sullivan ve Rachel Andrew tarafından incelendi.