Zarejestruj aplikację jako moduł obsługi plików w systemie operacyjnym.
Teraz gdy aplikacje internetowe mogą odczytywać i zapisywać pliki, kolejnym logicznym krokiem jest umożliwienie deweloperom zadeklarowania ich jako modułów obsługi plików, które mogą tworzyć i przetwarzać. Interfejs File Handling API umożliwia właśnie to. Po zarejestrowaniu aplikacji edytora tekstu jako modułu obsługi plików i jej zainstalowaniu możesz kliknąć plik .txt
prawym przyciskiem myszy w systemie macOS i wybrać „Pobierz informacje”, aby instruować system, że pliki .txt
powinny zawsze otwierać się domyślnie w tej aplikacji.
Sugerowane przypadki użycia interfejsu File Handling API
Przykłady witryn, które mogą korzystać z tego interfejsu API:
- aplikacje pakietu Office, takie jak edytory tekstu, arkusze kalkulacyjne i programy do tworzenia prezentacji;
- edytory grafik i narzędzia do rysowania;
- narzędzia do edycji poziomów gier wideo;
Jak korzystać z interfejsu File handling API
Progresywne ulepszanie
Interfejs File Handling API nie może być wypełniany automatycznie. Funkcję otwierania plików za pomocą aplikacji internetowej można jednak udostępnić na 2 inne sposoby:
- Interfejs Web Share Target API pozwala deweloperom określić aplikację jako docelowe miejsce udostępniania, dzięki czemu pliki można otwierać z poziomu panelu udostępniania systemu operacyjnego.
- Interfejs File System Access API można zintegrować z przeciąganiem i upuszczaniem plików, aby deweloperzy mogli obsługiwać upuszczane pliki w otwartej już aplikacji.
Obsługa przeglądarek
Wykrywanie cech
Aby sprawdzić, czy interfejs File Handling API jest obsługiwany, użyj:
if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
// The File Handling API is supported.
}
Deklaratywna część interfejsu File Handling API
W pierwszym kroku aplikacje internetowe muszą w swoim pliku manifestu aplikacji internetowej deklaratywnie określić, z jakimi plikami mogą pracować. Interfejs File handling API rozszerza plik manifestu aplikacji internetowej o nową właściwość "file_handlers"
, która akceptuje tablicę modułów obsługi plików. Obsługa pliku to obiekt z tymi właściwościami:
- Właściwość
"action"
, która jako wartość wskazuje adres URL będący w zakresie aplikacji. - Właściwość
"accept"
z obiektem typu MIME jako kluczami i listami rozszerzeń plików jako wartościami. - Właściwość
"icons"
z tablicą ikonImageResource
. Niektóre systemy operacyjne umożliwiają wyświetlanie ikony skojarzenia typu pliku, która nie jest tylko ikoną powiązanej aplikacji, ale specjalną ikoną związaną z korzystaniem z tego typu pliku w aplikacji. - Właściwość
"launch_type"
określająca, czy należy otworzyć wiele plików w jednym kliencie czy w kilku klientach. Wartość domyślna to"single-client"
. Jeśli użytkownik otworzy wiele plików, a obsługa pliku zostanie oznaczona jako"multiple-clients"
, nastąpi więcej niż 1 uruchomienie aplikacji. W przypadku każdego uruchomienia tablicaLaunchParams.files
(patrz poniżej) będzie zawierać tylko 1 element."launch_type"
Poniższy przykład, który zawiera tylko odpowiedni fragment pliku manifestu aplikacji internetowej, powinien być bardziej zrozumiały:
{
"file_handlers": [
{
"action": "/open-csv",
"accept": {
"text/csv": [".csv"]
},
"icons": [
{
"src": "csv-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "single-client"
},
{
"action": "/open-svg",
"accept": {
"image/svg+xml": ".svg"
},
"icons": [
{
"src": "svg-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "single-client"
},
{
"action": "/open-graf",
"accept": {
"application/vnd.grafr.graph": [".grafr", ".graf"],
"application/vnd.alternative-graph-app.graph": ".graph"
},
"icons": [
{
"src": "graf-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "multiple-clients"
}
]
}
Jest to hipotetyczna aplikacja, która obsługuje pliki z wartościami rozdzielanymi przecinkami (.csv
) w katalogu /open-csv
, skalowalne pliki grafiki wektorowej (.svg
) w /open-svg
oraz wymyślony format pliku Grafr z rozszerzeniem .grafr
, .graf
lub .graph
./open-graf
Pierwsze 2 okna otworzą się w ramach jednego klienta, a ostatnie – w ramach wielu klientów, jeśli przetwarzane są liczne pliki.
Imperatywna część interfejsu File Handling API
Teraz, gdy aplikacja teoretycznie określiła, jakie pliki może obsługiwać na danym adresie URL w zakresie, musi w praktyce wykonać jakieś działanie z przychodzącymi plikami. Wtedy przydaje się launchQueue
. Aby uzyskać dostęp do uruchomionych plików, witryna musi określić konsumenta dla obiektu window.launchQueue
. Uruchomienia są umieszczane w kolejce do momentu, aż zostaną obsłużone przez określonego konsumenta, który jest wywoływany dokładnie raz w przypadku każdego uruchomienia. W ten sposób obsługiwane jest każde uruchomienie, niezależnie od tego, kiedy konsument został określony.
if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
launchQueue.setConsumer((launchParams) => {
// Nothing to do when the queue is empty.
if (!launchParams.files.length) {
return;
}
for (const fileHandle of launchParams.files) {
// Handle the file.
}
});
}
Wsparcie dotyczące Narzędzi deweloperskich
Obecnie pomoc dotycząca Narzędzi deweloperskich nie jest obsługiwana, ale otrzymaliśmy od Ciebie prośbę o dodanie funkcji.
Prezentacja
Dodałem obsługę obsługi plików w aplikacji do rysowania w stylu rysunkowego komiksu Excalidraw. Aby ją przetestować, musisz najpierw zainstalować Excalidraw. Gdy utworzysz plik i zapiszesz go w swoim systemie plików, możesz otworzyć go, klikając dwukrotnie lub klikając prawym przyciskiem myszy i wybierając „Excalidraw” w menu kontekstowym. Implementację możesz sprawdzić w kodzie źródłowym.
Bezpieczeństwo
Zespół Chrome zaprojektował i wdrożył interfejs File handling API zgodnie z podstawowymi zasadami określonymi w artykule Kontrola dostępu do zaawansowanych funkcji platformy internetowej, takimi jak kontrola użytkowników, przejrzystość i ergonomia.
Uprawnienia, trwałość uprawnień i aktualizacje modułu obsługi plików
Aby zapewnić użytkownikom zaufanie i bezpieczeństwo ich plików, po otwarciu pliku przez interfejs File Managing API przed wyświetleniem pliku pojawia się prośba o przyznanie uprawnień. Ten komunikat o uprawnieniach będzie wyświetlany zaraz po wybraniu przez użytkownika aplikacji PWA do otwarcia pliku, aby uprawnienia były ściśle powiązane z działaniem polegającym na otwieraniu pliku za pomocą aplikacji PWA, co ułatwi ich zrozumienie i zwiększy ich trafność.
To uprawnienie będzie wyświetlane za każdym razem, dopóki użytkownik nie kliknie Zezwól lub Zablokuj obsługi plików w witrynie albo nie zignoruje tego prompta 3 razy (po czym Chromium zablokuje to uprawnienie). Wybrane ustawienie będzie obowiązywać po zamknięciu i ponowym otwarciu aplikacji internetowej.
Po wykryciu aktualizacji pliku manifestu i zmian w sekcji "file_handlers"
uprawnienia zostaną zresetowane.
Problemy związane z plikami
Istnieje wiele rodzajów ataków, które są możliwe, gdy zezwolisz witrynom na dostęp do plików. Informacje te znajdziesz w artykule na temat interfejsu File System Access API. Dodatkowa funkcja zabezpieczeń, którą interfejs File Handling API oferuje w porównaniu z interfejsem File System Access API, to możliwość przyznawania dostępu do określonych plików za pomocą wbudowanego interfejsu użytkownika systemu operacyjnego, a nie za pomocą selektora plików wyświetlanego przez aplikację internetową.
Nadal istnieje ryzyko, że użytkownicy mogą nieumyślnie przyznać aplikacji internetowej dostęp do pliku, otwierając go. Ogólnie jednak przyjmuje się, że otwarcie pliku umożliwia aplikacji, za pomocą której został otwarty, odczytywanie tego pliku lub manipulowanie nim. Dlatego wyraźny wybór przez użytkownika pliku w zainstalowanej aplikacji, np. w menu kontekstowym „Otwórz za pomocą…”, może być uznany za wystarczający sygnał zaufania do aplikacji.
Testy zabezpieczające domyślnego modułu obsługi
Wyjątkiem jest sytuacja, gdy w systemie hosta nie ma żadnych aplikacji dla danego typu pliku. W takim przypadku niektóre systemy operacyjne hosta mogą automatycznie promować nowo zarejestrowany moduł obsługi do modułu obsługi domyślnej dla tego typu pliku, bez udziału użytkownika. Oznacza to, że gdy użytkownik dwukrotnie kliknie plik tego typu, otworzy się on automatycznie w zarejestrowanej aplikacji internetowej. Gdy klient użytkownika stwierdzi, że nie ma domyślnego modułu obsługi dla danego typu pliku, może być konieczne wyraźne zezwolenie
Kontrola użytkownika
Specyfikacja określa, że przeglądarki nie powinny rejestrować jako modułu obsługi plików każdej witryny, która może obsługiwać pliki. Zamiast tego rejestracja obsługi plików powinna być powiązana z instalacją i nigdy nie powinna odbywać się bez wyraźnego potwierdzenia użytkownika, zwłaszcza jeśli witryna ma stać się domyślnym modułem obsługi. Zamiast przechwytywać istniejące rozszerzenia, takie jak .json
, dla których użytkownik prawdopodobnie ma już zarejestrowany domyślny moduł obsługi, witryny powinny tworzyć własne rozszerzenia.
Przejrzystość
Wszystkie systemy operacyjne umożliwiają użytkownikom zmianę bieżących powiązań plików. Jest to poza zakresem przeglądarki.
Prześlij opinię
Zespół Chrome chce poznać Twoje wrażenia związane z interfejsem File Handling API.
Prześlij informacje o projektowaniu interfejsu API
Czy coś w interfejsie API nie działa zgodnie z oczekiwaniami? A może brakuje metod lub właściwości, których potrzebujesz do wdrożenia swojego pomysłu? Masz pytania lub uwagi dotyczące modelu bezpieczeństwa?
- Zgłoś problem ze specyfikacją w odpowiednim repozytorium GitHub lub opisz swój problem.
Zgłaszanie problemów z implementacją
Czy znalazłeś/znalazłaś błąd w implementacji Chrome? A może implementacja różni się od specyfikacji?
- Zgłoś błąd na stronie new.crbug.com. Podaj jak najwięcej szczegółów, proste instrukcje odtwarzania błędu i wpisz
UI>Browser>WebAppInstalls>FileHandling
w polu Składniki. Glitch świetnie nadaje się do szybkiego i łatwego udostępniania materiałów.
Pokaż informacje o pomocy dotyczącej interfejsu API
Zamierzasz używać interfejsu File Handling API? Twoja publiczna pomoc pomaga zespołowi Chrome ustalać priorytety funkcji i pokazuje innym dostawcom przeglądarek, jak ważne jest wspieranie tych funkcji.
- W wątku na forum Discourse dotyczącej WGICh opisz, jak zamierzasz go używać.
- Wyślij tweeta do @ChromiumDev, używając hashtaga
#FileHandling
, i powiedz nam, gdzie i jak z niego korzystasz.
Przydatne linki
- Publiczny film wyjaśniający
- Demonstracja File Handling API | źródło pliku demonstracyjnego File Handling API
- Błąd śledzenia w Chromium
- Wpis na temat ChromeStatus.com
- Składnik Blink:
UI>Browser>WebAppInstalls>FileHandling
- Ocena TAG
- Mozilla Standards Position
Podziękowania
Interfejs File handling API określili Eric Willigers, Jay Harris i Raymes Khoury. Ten artykuł zrecenzował Joe Medley.