Możesz teraz uzyskać stały dostęp do odczytu i zapisu plików i folderów bez konieczności wielokrotnego przyznawania uprawnień. Z tego posta dowiesz się, jak to działa. Zanim przejdziemy do szczegółów, przypomnijmy sobie obecny stan rzeczy i problem, który rozwiązujemy.
Problemy z obecną metodą
Interfejs File System Access API umożliwia deweloperom dostęp do plików na lokalnym dysku twardym użytkownika w trybie odczytu i (opcjonalnie) zapisu. Jedną z popularnych aplikacji (wśród wielu innych), która korzysta z tego interfejsu API, jest Visual Studio Code (VS Code), czyli środowisko IDE firmy Microsoft, które działa bezpośrednio w przeglądarce. Po otwarciu VS Code zobaczysz ekran Witamy, na którym możesz utworzyć nowy plik lub otworzyć istniejący plik lub folder.
Jeśli klikniesz Otwórz folder i wybierzesz jeden z folderów na dysku twardym, przeglądarka zapyta, czy chcesz przyznać VS Code dostęp do tego folderu w trybie wyświetlania.
Po przyznaniu dostępu możesz poruszać się po hierarchii folderów i otwierać pliki w edytorze VS Code. Jeśli wprowadzisz zmiany w dowolnym pliku, przeglądarka zapyta, czy chcesz przyznać dostęp do edytowania folderu.
Jeśli to zrobisz, ikona pliku na pasku adresu zmieni się i pojawi się mała strzałka w dół, co oznacza, że aplikacja ma uprawnienia do odczytu i zapisu. Aby zmienić uprawnienia, kliknij ikonę, a następnie Usuń dostęp, aby aplikacja nie mogła już edytować plików.
Dostęp jest ważny do momentu zamknięcia ostatniej karty pochodzącej z danej domeny. Jeśli zamkniesz aplikację i otworzysz ją ponownie, VS Code w pewnym sensie pozwoli Ci kontynuować pracę w miejscu, w którym została przerwana. Gdy klikniesz Otwórz ostatnie, VS Code zaproponuje ponowne otwarcie wcześniej otwartego folderu.
Nawet jeśli wcześniej przyznano uprawnienia do zapisu w folderze, teraz trzeba przyznać dostęp ponownie. To szybko męczy. Zanim przejdziemy do rozwiązania, czyli trwałych uprawnień do interfejsu File System Access API, zastanówmy się, jak VS Code zapamiętuje ostatnio używane foldery.
W interfejsie File System Access API dostęp do plików i folderów jest zarządzany za pomocą obiektów FileSystemHandle
:FileSystemFileHandle
w przypadku plików i FileSystemDirectoryHandle
w przypadku folderów (katalogów). Oba te elementy mogą być przechowywane w IndexedDB i tak właśnie działa VS Code. Możesz to sprawdzić, otwierając Narzędzia deweloperskie w Chrome. Na karcie Aplikacja przejdź do sekcji IndexedDB i wybierz odpowiednią tabelę vscode-filehandles-store
w vscode-web-db
bazie danych.
Nowy sposób: co się zmienia i kiedy
W Chrome wprowadzamy nowe zachowanie, które pozwala użytkownikom opcjonalnie przyznawać stały dostęp do plików i folderów, dzięki czemu nie trzeba ciągle prosić użytkownika o ponowne przyznanie dostępu.
Nowe zachowanie można zaobserwować od Chrome 122. Aby przetestować tę funkcję wcześniej, od Chrome 120 włącz flagi chrome://flags/#file-system-access-persistent-permission
i chrome://flags/#one-time-permission
, ustawiając je na Włączone.
Po pierwsze, nowe zachowanie polega na wyświetlaniu nowego 3-kierunkowego okna z prośbą o uprawnienia, które opcjonalnie umożliwia użytkownikom przyznawanie aplikacjom dostępu do wybranych plików i folderów podczas każdej wizyty.
Nowa prośba z 3 opcjami zawiera te opcje:
- Zezwól tymczasowo:zezwala aplikacji na dostęp do plików w bieżącej sesji. (Odpowiada to dotychczasowemu działaniu).
- Zezwalaj przy każdej wizycie: aplikacja ma nieograniczony dostęp, chyba że dostęp zostanie cofnięty. Po przyznaniu aplikacji stałego dostępu nowo otwarte pliki i foldery również będą dostępne w sposób stały.
- Nie zezwalaj:uniemożliwia aplikacji dostęp do plików. (Odpowiada to dotychczasowemu działaniu).
Po drugie, nowe działanie wiąże się z nową sekcją w ustawieniach witryny, do której użytkownicy mogą przejść, klikając ikonę uruchamiania obok przełącznika Edytowanie plików.
Po kliknięciu tej ikony uruchamiania otworzą się ustawienia Prywatność i bezpieczeństwo aplikacji, w których użytkownik zobaczy listę wszystkich plików i folderów, do których aplikacja ma dostęp. Dostęp można cofnąć w przypadku poszczególnych elementów, klikając ikonę kosza. Usunięcie dostępu do poszczególnych elementów oznacza, że aplikacja nadal może mieć ogólny dostęp do plików. Aby cofnąć dostęp, użytkownik może kliknąć ikonę na pasku adresu, jak opisano wcześniej.
Jak wywołać nowe zachowanie
W interfejsie File System Access API nie wprowadzono żadnych zmian widocznych dla deweloperów. Aby wywołać nowe działanie z trwałymi uprawnieniami, masz 3 sposoby, które wymagają spełnienia różnych warunków wstępnych:
- Użytkownik musi przyznać uprawnienia do pliku lub folderu (albo wielu plików lub folderów) podczas ostatniej wizyty w domenie, a aplikacja musi przechowywać odpowiednie obiekty
FileSystemHandle
w IndexedDB. Podczas kolejnej wizyty w domenie aplikacja musi pobrać z IndexedDB dowolny z zapisanych obiektówFileSystemHandle
, a następnie wywołać jego metodęFileSystemHandle.requestPermission()
. Jeśli te warunki wstępne zostaną spełnione, wyświetli się nowy trójstronny prompt. - Pochodzenie musi wywołać metodę
FileSystemHandle.requestPermission()
na obiekcieFileSystemHandle
, do którego wcześniej przyznano dostęp, ale którego dostęp został automatycznie unieważniony, ponieważ karta była przez pewien czas w tle. (Automatyczne cofanie uprawnień działa na podstawie tej samej logiki, która została opisana w artykule Jednorazowe uprawnienia w Chrome). Jeśli te warunki wstępne są spełnione, wyświetli się nowy trójstronny prompt. - Użytkownik musi mieć zainstalowaną aplikację. Zainstalowane aplikacje automatycznie zachowują uprawnienia po przyznaniu dostępu przez użytkownika. W takim przypadku nie pojawi się prośba o wybór jednej z 3 opcji, a aplikacja domyślnie będzie działać w nowy sposób.
W pierwszym i drugim przypadku w prompcie wyświetlane są wszystkie FileSystemHandle
obiekty, do których aplikacja miała wcześniej dostęp, a nie tylko ten, dla którego wywoływana jest metoda requestPermission()
. Zgodnie z zasadami działania jednorazowych uprawnień, jeśli użytkownik odrzuci lub zamknie prośbę o przyznanie uprawnień więcej niż 3 razy, nie będzie się ona już wyświetlać. Zamiast niej pojawi się zwykła prośba o przyznanie uprawnień.
Wypróbuj nowe zachowanie
Jeśli masz obsługiwaną wersję Chrome lub ustawione wymagane flagi, możesz przetestować nowe działanie w VS Code w internecie. Otwórz folder i przyznaj dostęp, a następnie zamknij kartę i otwórz ją ponownie. Kliknij Otwórz ostatnie (pamiętaj, że natychmiastowe ponowne wczytanie nie powoduje wyświetlenia prompta, wszystkie karty muszą być zamknięte). Wybierz poprzedni folder, a pojawi się nowy prompt.
Podsumowanie
Trwałe uprawnienia do interfejsu File System Access API to jedna z najczęściej zgłaszanych funkcji tego interfejsu, a błąd implementacji jest również bardzo popularny i wielu programistów go obserwuje. Wprowadzenie tej funkcji w ręce deweloperów, a przede wszystkim użytkowników, wypełnia ważną lukę w funkcjach w porównaniu z aplikacjami na konkretne platformy.
Podziękowania
Ten post został sprawdzony przez Christine Hollingsworth, Austina Sullivana i Rachel Andrew.