Pozwól zainstalowanym aplikacjom internetowym modułami obsługi plików

Zarejestruj aplikację jako moduł obsługi plików w systemie operacyjnym.

Teraz gdy aplikacje internetowe mogą odczytywać i zapisywać pliki, jest umożliwienie deweloperom zadeklarowania tych aplikacji internetowych jako modułów obsługi plików, tworzyć i przetwarzać. Właśnie to umożliwia interfejs File handling API. Po zarejestrowaniu wiadomości tekstowej jako modułu obsługi plików. Po zainstalowaniu możesz kliknąć plik .txt prawym przyciskiem myszy na urządzeniu z macOS, Wybierz „Informacje”. aby instruować system operacyjny, aby zawsze otwierał pliki .txt przy użyciu tej aplikacji jako wartość domyślną.

Sugerowane przypadki użycia interfejsu File Handling API

Przykłady witryn, które mogą korzystać z tego interfejsu API:

  • Aplikacje biurowe, takie jak edytory tekstu, aplikacje do arkuszy kalkulacyjnych i twórcy pokazów slajdów.
  • Edytory graficzne i narzędzia do rysowania.
  • Narzędzia do edycji poziomów w grach wideo.

Jak korzystać z interfejsu File handling API

Stopniowe ulepszanie

Interfejs File handling API per se nie może być wypełniany za pomocą kodu wypełniacza. Funkcja otwierania plików w przeglądarce aplikacji można jednak udostępnić na dwa inne sposoby:

  • Interfejs Web Share Target API umożliwia deweloperom określenie aplikacji jako celu udostępniania aby można było otwierać pliki z arkusza udostępniania systemu operacyjnego.
  • Interfejs File System Access API można zintegrować z funkcją przeciągania i upuszczania plików. nawet jeśli użytkownicy usuną pliki w już otwartej aplikacji.

Obsługa przeglądarek

Obsługa przeglądarek

  • Chrome: 102.
  • Edge: 102.
  • Firefox: funkcja nieobsługiwana.
  • Safari: nieobsługiwane.

Źródło

Wykrywanie cech

Aby sprawdzić, czy interfejs File handling API jest obsługiwany, użyj polecenia:

if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
  // The File Handling API is supported.
}

Deklaratywna część interfejsu File Handling API

Przede wszystkim w pliku manifestu aplikacji internetowej musisz opisać aplikację internetową w sposób deklaratywny. jakie pliki są obsługiwane. Interfejs File handling API rozszerza plik manifestu aplikacji internetowej o nowy właściwość o nazwie "file_handlers", która akceptuje tablicę modułów obsługi plików. Moduł obsługi plików to obiektu o tych właściwościach:

  • Właściwość "action", która jako wartość wskazuje adres URL będący w zakresie aplikacji.
  • Właściwość "accept" z obiektem typów MIME w postaci kluczy i list rozszerzeń plików .
  • Właściwość "icons" z tablicą ImageResource . Niektóre systemy operacyjne umożliwiają powiązanie typu pliku w celu wyświetlania ikony, która nie jest tylko z ikoną powiązanej aplikacji, ale specjalną ikoną związaną z użyciem danego typu pliku z aplikacją.
  • Właściwość "launch_type", która określa, czy w jednym miejscu należy otworzyć wiele plików jak i wielu klientów. Wartość domyślna to "single-client". Jeśli użytkownik otwiera wiele plików, a do modułu obsługi pliku dodano adnotację "multiple-clients" jako "launch_type", zostanie uruchomiony więcej niż 1 aplikacja, a przy każdym uruchomieniu Tablica LaunchParams.files (patrz więcej informacji) będą mieć tylko jeden element.

Przykład poniżej, który zawiera tylko odpowiedni fragment pliku manifestu aplikacji internetowej, powinien sprawić, że wyraźniej:

{
  "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 wartości rozdzielanych przecinkami (.csv) w /open-csv, skalowalne pliki grafiki wektorowej (.svg) w domenie /open-svg oraz wymyślony format pliku Grafr z dowolnym rozszerzeniem .grafr, .graf lub .graph, które ma miejsce w /open-graf. Pierwsze dwa zostaną otwarte w ramach jednego klienta, ostatniego na wielu klientach, jeśli obsługiwane jest wiele plików.

Niezbędna część interfejsu File Handling API

Po zadeklarowaniu, jakie pliki obsługuje określone adresy URL w zakresie, aplikacja musi z przychodzącymi plikami w praktyce. Oto zalety launchQueue w grę. Aby uzyskać dostęp do uruchomionych plików, witryna musi określić konsumenta dla elementu window.launchQueue obiektu. Uruchomienia są umieszczane w kolejce do momentu, gdy są obsługiwane przez określonego konsumenta, który jest wywoływany dokładnie raz dla każdego uruchomienia. W ten sposób obsługiwane jest każde uruchomienie, niezależnie od tego, kiedy określonemu konsumentowi.

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.
    }
  });
}

Pomoc dotycząca Narzędzi deweloperskich

W tej chwili nie oferujemy pomocy w Narzędziach deweloperskich, ale przesłałem(-am) zgłoszenie prośba o dodanie funkcji do pomocy, – dodano.

Prezentacja

Dodaliśmy obsługę plików do Excalidraw, aplikacji do rysowania w stylu kreskówek. Aby to przetestować, najpierw musisz zainstalować Excalidraw. Kiedy następnie utworzysz w nim plik i zapiszesz go w dowolnym miejscu w systemie plików, możesz otworzyć plik, klikając dwukrotnie lub prawym przyciskiem myszy, „Excalidraw” w menu kontekstowym. Sposób wdrażania znajdziesz w źródle w kodzie.

Okno wyszukiwania systemu macOS z plikiem Excalidraw.
Kliknij dwukrotnie plik lub kliknij go prawym przyciskiem myszy w Eksploratorze plików w systemie operacyjnym.
.
.
Menu kontekstowe wyświetlane po kliknięciu pliku prawym przyciskiem myszy z zaznaczonym elementem Otwórz za pomocą... Excalidraw .
Excalidraw to domyślny moduł obsługi plików .excalidraw.

Bezpieczeństwo

Zespół Chrome zaprojektował i wdrożył interfejs File Handle API, kierując się podstawowymi zasadami, w artykule Kontrolowanie dostępu do zaawansowanych funkcji platformy internetowej, w tym kontroli nad użytkownikami, przejrzystość i ergonomię.

Uprawnienia, trwałość uprawnień i aktualizacje modułów obsługi plików

Dbamy o zaufanie użytkowników i bezpieczeństwo ich gdy interfejs File handling API otworzy plik, zanim PWA będzie mogła wyświetlić plik, pojawi się prośba o przyznanie uprawnień. Ta prośba o przyznanie uprawnień będzie wyświetlana zaraz po wybraniu aplikacji PWA do otwarcia pliku przez użytkownika, więc uprawnienia są ściśle powiązane z otworzyć plik przy użyciu aplikacji PWA, zwiększając jego przejrzystość i trafność.

To uprawnienie będzie wyświetlane za każdym razem, dopóki użytkownik nie kliknie Zezwól lub Zablokuj na obsługę plików. witryny lub 3 razy zignoruje ten prompt (po tym czasie Chromium zablokuje embargo uprawnienia). Wybrane ustawienie będzie obowiązywać podczas zamykania i ponownego uruchamiania aplikacji PWA.

Po wykryciu aktualizacji lub zmian w sekcji "file_handlers" uprawnienia zostanie zresetowany.

Istnieje duża kategoria wektorów ataku, które można otwierać, zezwalając witrynom na dostęp do plików. Zostały one wymienione w o interfejsie File System Access API. dodatkowa funkcjonalność związana z bezpieczeństwem, którą zapewnia interfejs File handling API w porównaniu z systemem plików Interfejs API Access to możliwość przyznawania dostępu do określonych plików za pomocą wbudowanych funkcji systemu operacyjnego interfejsu użytkownika, a nie przy użyciu selektora plików wyświetlanego przez aplikację internetową.

Nadal istnieje ryzyko, że użytkownicy mogą nieumyślnie przyznać aplikacji internetowej dostęp do pliku przez jej otwarcie. Jednak ogólnie przyjmuje się, że otwarcie pliku umożliwia aplikacji, do której aby go otworzyć i/lub zmodyfikować. Oznacza to, że wyraźna opcja otwarcia pliku przez użytkownika w zainstalowanej aplikacji, na przykład przy użyciu polecenia „Otwórz w...” menu kontekstowego, może być interpretowany jako wystarczający to sygnał zaufania do aplikacji.

Testy zabezpieczające dla domyślnego modułu obsługi

Wyjątkiem jest sytuacja, gdy w systemie hosta nie ma aplikacji dla danego typu pliku. W w takim przypadku niektóre systemy operacyjne hosta mogą automatycznie przenosić nowo zarejestrowany moduł obsługi do jako domyślny moduł obsługi tego typu plików, bez ingerencji użytkownika. To spowoduje jeśli użytkownik dwukrotnie kliknie plik tego typu, automatycznie otworzy się on aplikacji internetowej. w systemach operacyjnych hosta, gdy klient użytkownika stwierdzi, że nie ma istniejących jako domyślnego modułu obsługi tego typu pliku, może być konieczne wyraźne wyświetlenie prośby o zgodę, aby uniknąć przypadkowe wysłanie zawartości pliku do aplikacji internetowej bez zgody użytkownika;

Kontrola użytkowników

Specyfikacja wskazuje, że przeglądarki nie powinny rejestrować każdej witryny, która może obsługiwać pliki jako pliki. . Zamiast tego rejestracja obsługi plików powinna być zablokowana za instalacją i nigdy nie miała miejsca. bez wyraźnego potwierdzenia użytkownika, zwłaszcza jeśli strona ma zostać domyślnym modułem obsługi. Zamiast tego niż przejęcie istniejących rozszerzeń, takich jak .json, które prawdopodobnie ma już domyślny moduł obsługi zarejestrowanych w witrynie, powinny rozważyć utworzenie własnych rozszerzeń.

Przejrzystość

Wszystkie systemy operacyjne umożliwiają użytkownikom zmianę bieżących powiązań plików. To wykracza poza zakres przeglądarki.

Prześlij opinię

Zespół Chrome chce dowiedzieć się więcej o Twoich doświadczeniach z interfejsem File handling API.

Opowiedz nam o konstrukcji interfejsu API

Czy jest coś, co nie działa w interfejsie API zgodnie z oczekiwaniami? Czy może brakuje tu metod lub właściwości potrzebne do realizacji pomysłu? Masz pytanie lub komentarz na temat zabezpieczeń model?

  • Zgłoś problem ze specyfikacją w odpowiednim repozytorium GitHub lub dodaj uwagi do istniejącego Google Cloud.

Zgłoś problem z implementacją

Czy wystąpił błąd z implementacją Chrome? Czy implementacja różni się od specyfikacji?

  • Zgłoś błąd na new.crbug.com. Podaj jak najwięcej szczegółów możesz, proste instrukcje odtwarzania i wpisać UI>Browser>WebAppInstalls>FileHandling w w polu Komponenty. Glitch świetnie nadaje się do szybkiego i łatwego udostępniania. repro.

Pokaż wsparcie dla interfejsu API

Czy zamierzasz korzystać z interfejsu File Handling API? Twoje publiczne wsparcie pomaga zespołowi Chrome w: nadaje priorytet funkcjom i pokazuje innym dostawcom przeglądarek, jak ważne jest ich wsparcie.

Przydatne linki

Podziękowania

Interfejs File handling API został określony przez Erica Willigersa. Jay Harris Raymes Khoury Ten artykuł zrecenzował(a) Joe Medley