Aby zastąpić funkcje podczas przechodzenia ze stron w tle na mechanizmy Service Worker rozszerzeń, deweloperzy mogą skorzystać z interfejsu chrome.offscreen
API i uprawnień manifestu w Chrome od wersji 109. Żądanie tych uprawnień umożliwia tworzenie dokumentów poza ekranem, które mogą korzystać z interfejsów DOM API bez uciążliwego otwierania nowych okien lub kart, które zakłócają korzystanie z interfejsu. Interfejs chrome.offscreen
API jest teraz dostępny w rozszerzeniach do Chrome.
W Chromium rozszerzenia Manifest V3 są oparte na mechanizmach service worker, ale nie zapewniają one obsługi tych samych interfejsów API i mechanizmów co w przypadku pełnych stron dokumentów (które obejmują strony w tle i strony zdarzeń). Poza tym za pomocą skryptów treści w celu uzyskania dostępu do interfejsów DOM API na stronach internetowych rozszerzenie może korzystać z różnych zasad bezpieczeństwa treści na poziomie poszczególnych stron. Aby rozwiązać ten problem, wprowadzamy Dokumenty poza ekranem, które obsługują funkcje i interfejsy API związane z DOM. Zezwalaj rozszerzeniom z platformy Manifest V3 na otwieranie minimalnych, ograniczonych i względnie niedozwolonych dokumentów poza ekranem w czasie działania za pomocą dedykowanego interfejsu API.
Informacje o funkcji
Ponieważ dokumenty poza ekranem są specjalnie zaprojektowane do obsługi przypadków użycia, które nie są obsługiwane przez mechanizmy Service Worker (np. odtwarzanie dźwięku), czas życia tej strony i przyznawane uprawnienia są niezależne od uprawnień instancji service worker.
Strona będzie miała cały okres działania, podobnie jak strony zdarzeń w pliku manifestu w wersji 2, ponieważ zostanie usunięta, gdy przestanie wykonywać działania. Klient użytkownika może też nałożyć dodatkowe ograniczenia dotyczące okresu ważności w odniesieniu do określonego celu.
Dokumenty spoza ekranu zostały zaprojektowane tak, aby wypełniały luki w interfejsach API, które są dostępne tylko dla interfejsów DOM API. Z tego względu interfejsy API rozszerzeń nie muszą być ujawniane bezpośrednio w tym kontekście. Aby zmniejszyć prawdopodobieństwo użycia ich przez rozszerzenia do „zastępowania strony w tle”, w dokumencie niewidocznym wyświetlają się tylko interfejsy API chrome.runtime
do przesyłania wiadomości. Deweloperzy mogą również korzystać z komunikatów internetowych, zgłaszając prawa do dokumentu poza ekranem jako klient za pomocą skryptu service worker.
Ponieważ niektóre przypadki użycia – w szczególności pobieranie witryn – wymagają dostępu do ramek z innych domen, dlatego zezwalamy na umieszczanie w tych dokumentach ramek z innych domen zgodnie z tymi samymi regułami, które obowiązują obecnie w przypadku stron rozszerzeń. W dokumentach nieekranowych skrypty treści określone przez rozszerzenie mogą być uruchamiane w tych ramkach, aby pobrać dowolną niezbędną treść, tak jak w przypadku każdej zwykłej strony internetowej.
Przyczyny i wymagające celu
Utworzenie dokumentu poza ekranem wymaga podania podanych powodów i dalszego uzasadnienia. Te przyczyny są wymienione w dokumentacji referencyjnej interfejsu API i obsługują okres ważności dokumentu na różne sposoby. Na przykład dokument otwarty do odtwarzania dźwięku ma inne reguły przechowywania niż w przypadku dokumentu otwartego do zarządzania schowkiem. W uzasadnieniu możesz też dokładniej opisać przeznaczenie dokumentu poza ekranem. Jest to ciąg tekstowy napisany przez dewelopera, a nie parametr, który wpływa na dokument. Z czasem będziemy dodawać kolejne powody do interfejsu API, gdy deweloperzy będą dzielić się opiniami i przypadkami użycia.
Przyszłość
Dla uproszczenia wdrożenia pierwsza wersja tego interfejsu API obsługuje tylko jedną stronę na rozszerzenie, na profil naraz. W kolejnych wersjach możemy go złagodzić, tak aby umożliwić obsługę wielu stron. Obecnie, gdy rozszerzenie działa w trybie podzielonego przy aktywnym profilu incognito, oba profile mogą zawierać po jednym dokumencie poza ekranem. W przyszłości planujemy udostępnić funkcję DOM instancji roboczej rozszerzenia. Rozszerzenia można przygotować w przyszłości, łącząc funkcje, które korzystają z interfejsu API poza ekranem, z odpowiednią komentowaną funkcją w skrypcie service worker na potrzeby późniejszej wymiany.
// 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);
}
Ponadto w miarę dodawania do skryptu service worker funkcji DOM i interfejsów API lista przyczyn koniecznych do utworzenia dokumentu zostanie uzupełniona lub zmniejszona w zależności od jego aktualnego stanu i powodów, dla których warto używać dokumentów poza ekranem.
Podsumowanie
Dokumenty pozaekranowe umożliwiają używanie rozszerzeń wymagających dostępu do interakcji z DOM lub okna, a które obecnie nie są dostępne w skryptach service worker. Oferuje też elastyczne podejście, które umożliwia dodawanie nowych przypadków użycia i usuwanie tych rozwiązanych w przyszłości. W określonych przypadkach rozszerzenia powinny korzystać z proponowanego interfejsu API dokumentów poza ekranem, a podstawowym kontekstem rozszerzenia powinien być skrypt service worker określony w pliku manifestu. Dokument poza ekranem nie powinien być miejscem przechowywania podstawowych elementów logicznych rozszerzenia, ponieważ ma on ograniczony dostęp do interfejsu API. Czas życia dokumentu poza ekranem jest niezależny od skryptu service worker, który go utworzył. Uwagi na temat cyklu życia mechanizmów Service Worker i przypadki użycia związane z czasem ich eksploatacji w rozszerzeniach zostaną omówione w oddzielnym poście na blogu. Przyczyny, dla których warto korzystać z dokumentów spoza ekranu, będą się zmieniać w miarę dodawania funkcji i interfejsów API do samego skryptu service worker. Chętnie poznamy opinie deweloperów.