Dokumenty poza ekranem w platformie Manifest V3

Ian Stanion
Ian Stanion

Aby zastąpić funkcje w przechodzeniu z stron w tle na rozszerzenia oparte na usługach, deweloperzy mogą od wersji 109 Chrome korzystać z interfejsu API chrome.offscreen i uprawnień w pliku manifestu. Żądanie tego uprawnienia umożliwia tworzenie dokumentów poza ekranem, aby używać interfejsów API DOM bez uciążliwego otwierania nowych okien lub kart, które zakłócają działanie aplikacji. Interfejs API chrome.offscreen jest teraz dostępny w rozszerzeniach do Chrome.

W Chromium rozszerzenia oparte na pliku manifestu w wersji 3 są oparte na usługach workera, ale usługi workera nie obsługują tych samych interfejsów API i mechanizmów co pełne strony oparte na dokumentach (w tym strony tła i strony zdarzeń). Ponadto korzystanie ze skryptów treści do uzyskiwania dostępu do interfejsów API DOM na stronach internetowych sprawia, że rozszerzenie jest zależne od różnych zasad bezpieczeństwa treści na poszczególnych stronach. Aby rozwiązać ten problem, wprowadzamy dokumenty poza ekranem, które będą obsługiwać funkcje i interfejsy API związane z DOM. Rozszerzenia manifestu III generacji będą mogły otwierać w czasie wykonywania minimalne, ograniczone i względnie bez uprawnień dokumenty poza ekranem za pomocą dedykowanego interfejsu API.

Informacje o funkcji

Dokumenty poza ekranem są przeznaczone do obsługi przypadków użycia, które nie są obsługiwane przez usługowe workery (np. odtwarzanie dźwięku), dlatego czas trwania tej strony i uprawnienia, które będą jej przypisane, są niezależne od czasu trwania workera usługi rozszerzenia. Strona będzie miała mechanizm dotyczący czasu trwania podobny do mechanizmu stron zdarzeń w pliku manifestu w wersji 2, co oznacza, że zostanie ona zdemontowana, gdy przestanie wykonywać działania. Dodatkowo agent użytkownika może nałożyć dalsze ograniczenia dotyczące czasu trwania w zależności od określonego celu. Dokumenty poza ekranem zostały zaprojektowane, aby wypełnić luki w interfejsach API, które są dostępne tylko dla interfejsów DOM API. Dzięki temu w tym kontekście interfejsy API rozszerzeń nie muszą być udostępniane bezpośrednio. Aby zmniejszyć prawdopodobieństwo, że rozszerzenia będą używać tych interfejsów jako „zastępników strony w tle”, udostępniamy dokumentowi poza ekranem tylko interfejsy Messaging API chrome.runtime. (deweloperzy mogą też używać wiadomości internetowych, przypisując dokument poza ekranem do klienta za pomocą swojego workera usługi). Ponieważ niektóre przypadki użycia, w szczególności pozyskiwanie danych ze stron internetowych, wymagają dostępu do ramek między domenami, zezwalamy tym dokumentom na umieszczanie takich ramek zgodnie z tymi samymi zasadami, które obowiązują w przypadku stron rozszerzeń. W przypadku dokumentów niewyświetlanych skrypty treści określone przez rozszerzenie mogą być uruchamiane w tych ramkach, aby pobrać niezbędne treści, tak jak w przypadku zwykłej strony internetowej.

Powody i wymaganie celu

Tworzenie dokumentu poza ekranem wymaga podania powodów i dodatkowego uzasadnienia. Te powody są wymienione w dokumentacji referencyjnej interfejsu API i określają czas życia dokumentu na różne sposoby. Na przykład dokument otwarty do odtwarzania dźwięku ma obecnie inne reguły dotyczące czasu trwania niż dokument otwarty do zarządzania skrótami. Możesz też dodać więcej szczegółów na temat celu dokumentu poza ekranem w uzasadnieniu, który jest ciągiem tekstowym napisanym przez dewelopera, a nie parametrem wpływającym na dokument. Z czasem do interfejsu API mogą zostać dodane kolejne powody, gdy deweloperzy będą przekazywać opinie i opisywać przypadki użycia.

Przyszłość

Ze względu na łatwość implementacji pierwsza wersja tego interfejsu API obsługuje tylko 1 stronę na rozszerzenie i profil. W przyszłych wersjach możemy zmienić to ustawienie, aby umożliwić obsługę większej liczby stron. Jeśli rozszerzenie działa w trybie podzielonego ekranu z aktywnym profilem incognito, zarówno profil normalny, jak i incognito może mieć po jednym dokumencie poza ekranem. Planujemy też wprowadzić w przyszłości obsługę DOM-u w rozszerzeniu. Możesz przygotować swoje rozszerzenia na przyszłość, łącząc funkcje, które korzystają z interfejsu Offscreen API, z odpowiednimi funkcjami z komentarzem w usługach dla pracowników, aby można je było później zamienić.

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

Dodatkowo, gdy do usługi dodawane są funkcje DOM i interfejsy API, lista przyczyn tworzenia dokumentu będzie się zwiększać lub zmniejszać w zależności od bieżącego stanu usługi i przyczyn używania dokumentów poza ekranem.

Podsumowanie

Dokumenty poza ekranem umożliwiają rozszerzeniom dostęp do modelu DOM lub interakcji z oknem, których obecnie nie można uzyskać w workerach usług. Zapewnia też elastyczność, ponieważ można dodawać nowe przypadki użycia i usuwać te, które zostały rozwiązane. Rozszerzenia powinny używać proponowanego interfejsu API dokumentu poza ekranem w określonych przypadkach użycia, a głównym kontekstem działania rozszerzenia w tle powinien pozostać serwis worker określony w pliku manifestu. Dokument poza ekranem nie powinien być miejscem przechowywania głównej logiki rozszerzenia, ponieważ ma ograniczony dostęp do interfejsu API. Czas trwania dokumentu poza ekranem jest niezależny od usługi, która go utworzyła. W oddzielnym wpisie na blogu omówimy kwestie związane z czasem działania usług w rozszerzeniach i przypadki użycia związane z czasem działania usług. Powody, dla których warto używać dokumentów poza ekranem, będą się zmieniać w czasie, ponieważ do samego serwisu workera będą dodawane funkcje i interfejsy API. Chętnie poznamy opinie deweloperów na temat tych zmian.

Zdjęcie: Kari SheaUnsplash