Określ, jak objęte raportowaniem linki mają otwierać Twoją PWA w ramach deklaratywnej rejestracji linków

Czym jest deklaratywne przechwytywanie linków?

Klikanie linków w internecie może czasami być miłym zaskoczeniem. Na przykład kliknięcie linku do strony internetowej YouTube na urządzeniu mobilnym spowoduje otwarcie aplikacji YouTube na iOS lub Androida, jeśli jest ona zainstalowana. Jeśli jednak zainstalujesz aplikację PWA YouTube na komputerze i klikniesz link, otworzy się on na karcie przeglądarki.

Ale to bardziej skomplikowane. Co zrobić, jeśli link pojawi się nie w witrynie, ale w wiadomości na czacie, którą otrzymasz w jednej z aplikacji do czatowania Google? W przypadku systemów operacyjnych na komputery, które mają oddzielne okna aplikacji, czy w przypadku każdego kliknięcia linku, gdy aplikacja jest już otwarta, powinno się tworzyć nowe okno czy kartę? Linków i elementów nawigacyjnych można używać na wiele sposobów, m.in.:

Deklaratywne przechwytywanie linków to propozycja właściwości pliku manifestu aplikacji internetowej o nazwie "capture_links" która umożliwia deweloperom deklaratywne określanie, co powinno się stać, gdy przeglądarka zostanie poproszona o przejście do adresu URL znajdującego się w zakresie nawigacji aplikacji, z kontekstu spoza tego zakresu. Ta propozycja nie ma zastosowania, jeśli użytkownik znajduje się już w zakresie nawigacji (np. jeśli ma otwartą kartę przeglądarki, która jest w zakresie, i kliknie link wewnętrzny).

Niektóre specjalne warunki, takie jak kliknięcie linku środkowym przyciskiem myszy (lub kliknięcie prawym przyciskiem myszy, a następnie wybranie opcji „Otwórz w nowej karcie”), zwykle nie powodują przechwytywania linku. Nie ma znaczenia, czy link jest target=_self czy target=_blank, więc linki kliknięte w oknie przeglądarki (lub w oknie innej progresywnej aplikacji internetowej) będą otwierane w progresywnej aplikacji internetowej, nawet jeśli zwykle powodują nawigację w ramach tej samej karty.

Sugerowane przypadki użycia

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

  • Progresywne aplikacje internetowe, które chcą otwierać okno zamiast karty przeglądarki, gdy użytkownik kliknie link do nich. W środowisku komputerowym często warto mieć otwartych kilka okien aplikacji jednocześnie.
  • Aplikacje PWA z jednym oknem, w których deweloper woli, aby w danym momencie była otwarta tylko jedna instancja aplikacji, a nowe nawigacje skupiały się na istniejącej instancji. Przykłady zastosowań:
    • Aplikacje, w przypadku których warto mieć tylko jedną instancję (np. odtwarzacz muzyki lub gra).
    • Aplikacje, które obejmują zarządzanie wieloma dokumentami w ramach jednej instancji (np. pasek kart zaimplementowany w HTML).

Włączanie za pomocą about://flags

Aby eksperymentować z deklaratywnym przechwytywaniem linków lokalnie, bez tokena okresu próbnego, włącz flagę #enable-desktop-pwas-link-capturingabout://flags.

Jak korzystać z deklaratywnego przechwytywania linków?

Deweloperzy mogą deklaratywnie określać, jak linki mają być przechwytywane, korzystając z dodatkowego pola pliku manifestu aplikacji internetowej "capture_links". Jego wartością może być ciąg znaków lub tablica ciągów znaków. Jeśli podana jest tablica ciągów znaków, klient użytkownika wybiera pierwszy obsługiwany element na liście, domyślnie "none". Obsługiwane są te wartości:

  • "none" (domyślne): brak przechwytywania linków; kliknięte linki prowadzące do tego zakresu PWA działają normalnie bez otwierania okna PWA.
  • "new-client": każdy kliknięty link otwiera nowe okno PWA pod tym adresem URL.
  • "existing-client-navigate": kliknięty link otwiera się w istniejącym oknie aplikacji PWA (jeśli jest dostępne) lub w nowym oknie (jeśli nie jest). Jeśli istnieje więcej niż jedno okno PWA, przeglądarka może wybrać dowolne z nich. Działa to tak samo jak "new-client", jeśli nie jest otwarte żadne okno. 🚨 Uważaj! Ta opcja może prowadzić do utraty danych, ponieważ użytkownicy mogą dowolnie opuszczać strony. Witryny powinny pamiętać, że wybierając tę opcję, wyrażają zgodę na takie działanie. Ta opcja najlepiej sprawdza się w przypadku witryn „tylko do odczytu”, które nie przechowują danych użytkownika w pamięci, np. odtwarzaczy muzyki. Jeśli strona, z której użytkownik wychodzi, ma beforeunloadzdarzenie, zobaczy on prompt przed zakończeniem nawigacji.

Prezentacja

Wersja demonstracyjna deklaratywnego przechwytywania linków składa się z 2 wersji demonstracyjnych, które ze sobą współdziałają:

  1. Witryna 1
  2. Witryna 2

Poniższy screencast pokazuje, jak te 2 elementy ze sobą współpracują. Wykazują one 2 różne zachowania: "new-client""existing-client-navigate". Aby zobaczyć różnicę w działaniu, przetestuj aplikacje w różnych stanach – uruchomione w karcie lub jako zainstalowana progresywna aplikacja internetowa.

Zabezpieczenia i uprawnienia

Zespół Chromium zaprojektował i wdrożył deklaratywne przechwytywanie linków zgodnie z głównymi zasadami określonymi w artykule Controlling Access to Powerful Web Platform Features, w tym kontrolą użytkownika, przejrzystością i ergonomią. Ten interfejs API zapewnia witrynom nowe opcje kontroli. Po pierwsze, możliwość automatycznego otwierania zainstalowanych aplikacji w oknie. Wykorzystuje to istniejący interfejs, ale umożliwia witrynie automatyczne wywoływanie tego interfejsu. Po drugie, możliwość skupienia istniejącego okna na własnej domenie i uruchomienia zdarzenia zawierającego kliknięty adres URL. Ma to umożliwić witrynie przejście z istniejącego okna do nowej strony, co zastąpi domyślny przepływ nawigacji HTML.

Migracja do interfejsu Launch Handler API

Testowanie origin interfejsu Declarative Link Capturing API zakończyło się 30 marca 2022 r. w przypadku Chromium 97 i starszych wersji. Zostanie on zastąpiony zestawem nowych funkcji i interfejsów API w Chromium 98 i nowszych wersjach, które obejmują przechwytywanie linków włączane przez użytkownika oraz interfejs Launch Handler API.

W Chromium 98 automatyczne przechwytywanie linków jest teraz opcją, na którą użytkownik musi wyrazić zgodę, a nie uprawnieniem przyznawanym aplikacji internetowej podczas instalacji. Aby włączyć przechwytywanie linków, użytkownik musi uruchomić zainstalowaną aplikację z przeglądarki za pomocą opcji Otwórz za pomocą i wybrać Zapamiętaj mój wybór.

Przykład ustawienia „Otwórz za pomocą” zainstalowanej aplikacji z włączoną opcją „Zapamiętaj mój wybór”.

Użytkownicy mogą też włączyć lub wyłączyć przechwytywanie linków w przypadku konkretnej aplikacji internetowej na stronie ustawień zarządzania aplikacjami.

Przykład strony ustawień zainstalowanej aplikacji

Przechwytywanie linków to obecnie funkcja dostępna tylko w ChromeOS. Obsługa systemów Windows, macOS i Linux jest w trakcie wdrażania.

Launch Handler API

Kontrola nad przychodzącą nawigacją jest przenoszona do interfejsu Launch Handler API, który umożliwia aplikacjom internetowym decydowanie o sposobie uruchamiania w różnych sytuacjach, takich jak przechwytywanie linków, cel udostępniania czy obsługa plików itp. Aby przejść z interfejsu Declarative Link Capturing API na interfejs Launch Handler API:

  1. Zarejestruj witrynę w ramach testu pochodzenia Launch Handler i umieść klucz testu pochodzenia w aplikacji internetowej.
  2. Dodaj wpis "launch_handler" do pliku manifestu witryny.

    • Aby użyć "capture_links": "new-client", dodaj:"launch_handler": { "route_to": "new-client" }.
    • Aby użyć "capture_links": "existing-client-navigate", dodaj:"launch_handler": { "route_to": "existing-client-navigate" }.
    • Aby użyć "capture_links": "existing-client-event" (które nigdy nie zostało wdrożone w ramach testu origin Declarative Link Capturing), dodaj:"launch_handler": { "route_to": "existing-client-retain" }. Po włączeniu tej opcji strony w zakresie aplikacji nie będą już automatycznie przechodzić do innych stron po przechwyceniu nawigacji za pomocą linku. Musisz obsłużyć LaunchParams w JavaScript, wywołując window.launchQueue.setConsumer(), aby włączyć nawigację.

Pole capture_links i rejestracja testowania origin Declarative Link Capturing są ważne do 30 marca 2022 r. Dzięki temu użytkownicy Chromium 97 i starszych wersji będą mogli nadal uruchamiać aplikację internetową za pomocą przechwyconego linku.

Więcej informacji znajdziesz w artykule Kontrolowanie sposobu uruchamiania aplikacji.

Prześlij opinię

Zespół Chromium chce poznać Twoje wrażenia związane z funkcją deklaratywnego przechwytywania linków.

Opisz projekt interfejsu API

Czy coś w API nie działa tak, jak oczekujesz? Czy brakuje metod lub właściwości, które są potrzebne do realizacji Twojego pomysłu? Masz pytania lub uwagi dotyczące modelu zabezpieczeń? Zgłoś problem ze specyfikacją w odpowiednim repozytorium GitHub lub dodaj swoje uwagi do istniejącego problemu.

Zgłaszanie problemu z implementacją

Czy udało Ci się znaleźć błąd w implementacji Chromium? 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 i wpisz UI>Browser>WebAppInstalls w polu Komponenty.

Wyrażanie poparcia dla interfejsu API

Czy planujesz używać deklaratywnego przechwytywania linków? Twoje publiczne wsparcie pomaga zespołowi Chromium określać priorytety funkcji i pokazuje innym dostawcom przeglądarek, jak ważne jest ich wspieranie.

Wyślij tweeta do @ChromiumDev z hasztagiem #DeclarativeLinkCapturing i napisz, gdzie i jak korzystasz z tej funkcji.

Przydatne linki

Podziękowania

Deklaratywne przechwytywanie linków zostało opracowane przez Matta Giucę przy udziale Alana Cuttera i Dominicka Nga. Interfejs API został wdrożony przez Alana Cuttera. Ten artykuł został sprawdzony przez Joego Medleya, Matta Giucę, Alana Cuttera i Shunyę Shishido. Baner powitalny autorstwa Zulmaury SaavedryUnsplash.