Teraz możesz uzyskać stały dostęp do odczytu i zapisu do plików i folderów bez konieczności wielokrotnego przyznawania uprawnień. Z tego artykułu dowiesz się, jak to działa. Zanim przejdziemy do szczegółów, przypomnijmy sobie, jak wygląda obecna sytuacja i jaki problem rozwiązujemy.
Problemy z obecną metodą
Interfejs File System Access API umożliwia deweloperom odczytywanie i (opcjonalnie) zapisywanie plików na lokalnym dysku twardym użytkownika. Jedną z popularnych aplikacji (wśród wielu innych), która korzysta z tego interfejsu API, jest Visual Studio Code (VS Code) – środowisko IDE firmy Microsoft, które działa bezpośrednio w przeglądarce. Po otwarciu VS Code zobaczysz ekran powitalny, 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, aby VS Code miał dostęp do odczytu tego folderu.
Po przyznaniu dostępu możesz poruszać się po hierarchii folderów i otwierać pliki w edytorze VS Code. Jeśli wprowadzisz zmiany w jakimkolwiek pliku, przeglądarka zapyta, czy chcesz przyznać folderowi uprawnienia edytowania.
Jeśli zezwolisz na to, ikona pliku na pasku adresu zmieni się, a dodatkowo 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 będzie trwał do zamknięcia ostatniej karty w źródle. Jeśli zamkniesz aplikację i otworzysz ją ponownie, VS Code trochę pozwoli Ci kontynuować od miejsca, w którym przerwano pracę. Po kliknięciu Otwórz ostatnio VS Code wyświetli ostatnio otwarty folder.
Nawet jeśli wcześniej przyznałeś uprawnienia do zapisu w tym folderze, musisz je przyznać ponownie. To bardzo szybko staje się męczące. Zanim przejdziesz do rozwiązania, czyli trwałych uprawnień do interfejsu File System Access API, zastanów się, jak VS Code zapamiętuje ostatnio używane foldery.
W interfejsie File System Access API dostępem do plików i folderów zarządza się za pomocą obiektów FileSystemHandle
:FileSystemFileHandle
obiektów plików i FileSystemDirectoryHandle
obiektów folderów (katalogów). Oba można zapisać w IndexedDB, co właśnie robi VS Code. Aby to sprawdzić, otwórz DevTools w Chrome, na karcie Aplikacja przejdź do sekcji IndexedDB i wybierz odpowiednią tabelę vscode-filehandles-store
w bazie danych vscode-web-db
.
Nowy sposób: co się zmienia i kiedy
Chrome wprowadza nowe zachowanie, które pozwala użytkownikom opcjonalnie przyznać stały dostęp do plików i folderów, dzięki czemu nie trzeba będzie ciągle prosić o potwierdzenie.
Nowe zachowanie można zaobserwować od wersji Chrome 122. Aby przetestować tę funkcję wcześniej, od Chrome 120 ustaw 2 flagi chrome://flags/#file-system-access-persistent-permission
i chrome://flags/#one-time-permission
na Włączone.
Po pierwsze, nowe zachowanie obejmuje nowe 3-stopniowe okno z prośbą o przyznanie uprawnień, które umożliwia użytkownikom opcjonalne przyznawanie aplikacjom dostępu do wybranych plików i folderów przy każdej wizycie.
Ta nowa prośba z 3 opcjami zawiera te opcje:
- Zezwól tym razem: aplikacja może mieć dostęp do plików w ramach bieżącej sesji. (odpowiada to dotychczasowemu działaniu).
- Zezwalaj przy każdej wizycie:aplikacja ma nieograniczony dostęp, dopóki nie cofniesz uprawnień. Gdy aplikacji zostanie przyznany trwały dostęp, nowo otwarte pliki i foldery będą też dostępne na stałe.
- Nie zezwalaj:uniemożliwia aplikacji dostęp do plików. (To odpowiada obecnemu działaniu).
Po drugie, nowe działanie obejmuje nową sekcję w ustawieniach witryny, do której użytkownicy mogą przejść, klikając ikonę obok przełącznika Edycja pliku.
Po kliknięciu ikony uruchamiania otwierają się ustawienia Prywatność i bezpieczeństwo dotyczące danej aplikacji, w których użytkownik widzi 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 aplikacji można nadal przyznać dostęp do plików w ogóle. Aby cofnąć ogólny dostęp, użytkownik może kliknąć ikonę na pasku adresu, jak opisano wcześniej.
Jak wywołać nowe działanie
Interfejs File System Access API nie ulegnie zmianie w zakresie widocznym dla deweloperów. Aby uaktywnić nowe zachowanie z trwałymi uprawnieniami, możesz użyć 1 z 3 sposobów, które różnią się wymaganiami wstępnymi:
- Podczas ostatniej wizyty w źródle użytkownik musi przyznać uprawnienia do pliku lub folderu (lub wielu plików lub folderów), a aplikacja musi zapisać odpowiednie obiekty
FileSystemHandle
w IndexedDB. Podczas następnej wizyty w źródle aplikacja musi pobrać z IndexedDB dowolny z przechowywanych obiektówFileSystemHandle
, a następnie wywołać jego metodęFileSystemHandle.requestPermission()
. Jeśli te warunki wstępne są spełnione, wyświetli się nowy komunikat z 3 opcjami. - Źródło musi wywołać metodę
FileSystemHandle.requestPermission()
w obiekcieFileSystemHandle
, do którego wcześniej przyznano dostęp, ale który został automatycznie odłączony, ponieważ karta była przez jakiś czas w tle. (automatyczne cofnięcie uprawnień działa zgodnie z tą samą logiką, co opisano w artykule Uprawnienia jednorazowe w Chrome). Jeśli te warunki wstępne są spełnione, wyświetli się nowy komunikat z treścią. - Użytkownik musi mieć zainstalowaną aplikację. Zainstalowane aplikacje automatycznie zachowają uprawnienia, gdy użytkownik przyzna dostęp. W takim przypadku nie wyświetli się prośba o trzy opcje, a zamiast tego aplikacja automatycznie zastosuje nowe zachowanie.
W pierwszym i drugim przypadku w prośbie są wymienione wszystkie FileSystemHandle
obiekty, do których aplikacja miała wcześniej dostęp, a nie tylko ten, do którego wywoływana jest metoda requestPermission()
. Zgodnie z zasadami dotyczącymi jednorazowych uprawnień, jeśli użytkownik odmówi lub zamknie prośbę więcej niż 3 razy, prośba nie będzie się już wyświetlać, a zamiast niej pojawi się zwykła prośba o uprawnienia.
Wypróbuj nowe zachowanie
Jeśli masz wersję Chrome obsługującą tę funkcję lub masz ustawione wymagane flagi, możesz przetestować nowe zachowanie 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 ostatnio (pamiętaj, że natychmiastowe ponowne załadowanie nie powoduje wyświetlenia prompta, ponieważ wszystkie karty muszą być zamknięte). Wybierz poprzedni folder, a pojawi się nowy komunikat. Aby uzyskać bardziej ograniczony przypadek testowy, zapoznaj się z demo dostępu do trwałego systemu plików i sprawdzisz kod źródłowy.
Podsumowanie
Trwałe uprawnienia do interfejsu File System API to jedna z najbardziej pożądanych funkcji tego interfejsu API, a błąd implementacji jest bardzo popularny wśród wielu programistów. Dzięki udostępnieniu tej funkcji deweloperom i głównie użytkownikom udało się zniwelować istotną lukę w funkcjonalności w porównaniu z aplikacją na daną platformę.
Poświadczenia
Ten post został sprawdzony przez Christine Hollingsworth, Austin Sullivan i Rachel Andrew.