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 obecną sytuację i rozwiązany problem.
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 programistyczne Microsoftu, 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 przejdziemy do rozwiązania, czyli trwałych uprawnień do interfejsu File System Access API, zastanówmy się, jak VS Code w ogóle 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 te elementy 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 w bazie danych vscode-web-db
wybierz odpowiednią tabelę vscode-filehandles-store
.
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 wyświetlać prośby o pozwolenie.
Nowe zachowanie można zaobserwować od wersji Chrome 122. Aby przetestować tę funkcję wcześniej, od wersji 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 obecnemu 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. (odpowiada to 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 tej ikony uruchamiającej 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 wywołać 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ć 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 cofanie 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 wyświetleniu znajdują się 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, która obsługuje 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 monitu, 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 sprawdzidŹ jego 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. Udostępnienie tej funkcji deweloperom, a przede wszystkim użytkownikom, pozwoliło zniwelować istotną lukę w funkcjonalności w porównaniu z aplikacją na daną platformę.
Podziękowania
Ten post został sprawdzony przez Christine Hollingsworth, Austin Sullivan i Rachel Andrew.