Działania związane z rozszerzeniami w platformie Manifest V3

Szymon Vincent
Simeon Vincent

Od momentu wprowadzenia rozszerzeń do Chrome platforma ta pozwala deweloperom udostępniać ich funkcje bezpośrednio w najwyższym poziomie interfejsu za pomocą działań. Działanie to ikona, która może otworzyć wyskakujące okienko lub uruchomić jakieś funkcje rozszerzenia. W przeszłości Chrome obsługiwał 2 typy działań: działania przeglądarki i stron. W wersji 3 platformy Manifest V3 nastąpiło połączenie ich funkcji w nowy interfejs API chrome.action.

Krótka historia działań związanych z rozszerzeniem

Chociaż sama właściwość chrome.action jest nowa w platformie Manifest V3, jej podstawowe funkcje sięgają czasu, gdy rozszerzenia uzyskały stabilną wersję w styczniu 2010 r. Pierwsza stabilna wersja platformy rozszerzeń do Chrome obsługiwała 2 różne rodzaje działań: działania przeglądarki i działania na stronach.

Działania przeglądarki umożliwiały programistom wyświetlanie ikony „na głównym pasku narzędzi Google Chrome, po prawej stronie paska adresu” (źródła) i umożliwiały użytkownikom łatwe uruchamianie funkcji rozszerzenia na dowolnej stronie. Działania na stronie miały raczej na celu „reprezentowanie działań, które można wykonać na bieżącej stronie, ale nie dotyczą wszystkich stron” (źródło).

W omniboksie pojawi się działanie na stronie (po lewej), co oznacza, że rozszerzenie może wykonać daną czynność na tej stronie. Działanie przeglądarki (po prawej) jest zawsze widoczne.

Oznacza to, że działania w przeglądarce umożliwiły programistom rozszerzeń stały interfejs użytkownika w przeglądarce, podczas gdy działania na stronie pojawiły się tylko wtedy, gdy mogą wykonać jakieś przydatne działania na bieżącej stronie.

Oba te działania były opcjonalne, więc deweloper rozszerzenia może zdecydować się nie udostępniać żadnych działań albo określić działanie na stronie albo działanie przeglądarki (wyszczególnienie kilku działań jest niedozwolone).

Około 6 lat później w Chrome 49 wprowadzono nowy model interfejsu dla rozszerzeń. Aby użytkownicy wiedzieli, jakie rozszerzenia mają, Chrome zaczął wyświetlać wszystkie aktywne rozszerzenia po prawej stronie omniboksu. Użytkownicy mogą dodawać rozszerzenia do menu Chrome.

W menu Chrome pojawią się ukryte ikony rozszerzeń.

Aby wyświetlać ikony poszczególnych rozszerzeń, ta aktualizacja spowodowała też 2 ważne zmiany w działaniu rozszerzeń w interfejsie Chrome. Po pierwsze, wszystkie rozszerzenia zaczęły wyświetlać ikony na pasku narzędzi. Gdyby rozszerzenie nie miało ikony, Chrome automatycznie ją wygenerowałby. Po drugie, działania na stronie są przenoszone na pasek narzędzi razem z działaniami przeglądarki i otrzymują uprawnienia umożliwiające rozróżnianie stanów „Pokaż” i „Ukryj”.

Wyłączone działanie na stronie (po lewej) jest renderowane na pasku narzędzi w skali szarości, a włączone działanie na stronie (po prawej) jest wyświetlane w pełnym kolorze.

Dzięki tej zmianie rozszerzenia działań na stronie mogły nadal działać zgodnie z oczekiwaniami, ale z czasem zmniejszały swoją rolę tych działań. Zmiana wyglądu interfejsu polegała na tym, że działania na stronie zostały w praktyce zastąpione przez działania przeglądarki. Ponieważ wszystkie rozszerzenia pojawiły się na pasku narzędzi, użytkownicy spodziewali się, że kliknięcie ikony rozszerzenia na pasku narzędzi spowoduje jego uruchomienie, a działania przeglądarki stają się coraz ważniejszą interakcją z rozszerzeniami do Chrome.

Zmiany w pliku manifestu w wersji 3

Po wprowadzeniu zmian w interfejsie rozszerzeń w 2016 roku interfejs i rozszerzenia do Chrome były nadal ewoluowane, ale działania w przeglądarce i działania stron w dużej mierze pozostały takie same. Przynajmniej do czasu, gdy zaczęliśmy planować, jak zmodernizować platformę rozszerzeń za pomocą platformy Manifest V3.

Zespół ds. rozszerzeń zauważył, że działania w przeglądarce i działania na stronie coraz częściej są czymś, co nie ma znaczenia. Co gorsza, subtelne różnice w działaniu tych aplikacji utrudniają deweloperom wybór. Zdaliśmy sobie sprawę, że możemy rozwiązać te problemy, łącząc działanie przeglądarki i działanie na stronie w jednym „działaniu”.

Wpisz interfejs Action API. chrome.action jest najbardziej podobny do chrome.browserAction, ale występuje kilka istotnych różnic.

Po pierwsze, chrome.action wprowadza nową metodę o nazwie getUserSettings(). Dzięki tej metodzie programiści rozszerzeń mogą sprawdzić, czy użytkownik przypiął swoje działanie rozszerzenia do paska narzędzi.

let userSettings = await chrome.action.getUserSettings();
console.log(`Is the action pinned? ${userSettings.isOnToolbar ? 'Yes' : 'No'}.`);

Nazwa „getUserSettings” może wydawać się nieco nietypowa dla tej funkcji w porównaniu z na przykład „isPinned”, ale historia działań w Chrome pokazuje, że interfejs przeglądarki zmienia się szybciej niż interfejsy API rozszerzeń. Dlatego celem tego interfejsu API jest udostępnienie preferencji użytkownika związanych z działaniami w ogólnych interfejsach, aby zminimalizować ryzyko rezygnacji w przyszłości. Pozwala też innym dostawcom przeglądarek ujawniać koncepcje interfejsu związane z daną przeglądarką w obiekcie UserSettings zwracanym przez tę metodę.

Po drugie, ikonę i stan włączenia/wyłączenia działania rozszerzenia można kontrolować za pomocą interfejsu Deklaracja Content API. Jest to ważne, ponieważ pozwala rozszerzeniom reagować na zachowanie użytkownika podczas przeglądania internetu, ale nie ma dostępu do treści ani nawet adresów URL odwiedzanych przez nich stron. Przyjrzyjmy się na przykład, w jaki sposób rozszerzenie może włączyć swoje działanie, gdy użytkownik odwiedza strony w witrynie example.com.

// Manifest V3
chrome.runtime.onInstalled.addListener(() => {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
    chrome.declarativeContent.onPageChanged.addRules([
      {
        conditions: [
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: {hostSuffix: '.example.com'},
          })
        ],
        actions: [new chrome.declarativeContent.ShowAction()]
      }
    ]);
  });
});

Powyższy kod jest prawie taki sam jak działanie rozszerzenia w przypadku działania na stronie. Jedyną różnicą jest to, że w platformie Manifest V3 użyto declarativeContent.ShowAction zamiast declarativeContent.ShowPageAction.

Blokady treści mogą też korzystać z metody setExtensionActionOptions interfejsu deklarativeNetRequest API, aby wyświetlać liczbę żądań zablokowanych przez rozszerzenie w przypadku danej karty. Ta możliwość jest ważna, ponieważ umożliwia blokowaniem treści informowania użytkowników bez ujawniania rozszerzeniu potencjalnie poufnych metadanych przeglądania.

Podsumowanie

Modernizowanie platformy rozszerzeń do Chrome było dla nas jednym z głównych powodów wprowadzenia platformy Manifest V3. W wielu przypadkach oznaczało to przejście na nowe technologie, ale także uproszczenie interfejsu API.

Mam nadzieję, że ten post pomógł rozwiać wątpliwości dotyczące tego konkretnego rogu platformy Manifest V3. Aby dowiedzieć się więcej o tym, jak zespół Chrome planuje przyszłość rozszerzeń do przeglądarki, zapoznaj się z sekcjami Wizja platformy i Omówienie platformy Manifest V3 w naszej dokumentacji dla deweloperów. Rozszerzenia do Chrome możesz też omawiać z innymi programistami w grupie dyskusyjnej Google chromium-extensions.