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

Od czasu wprowadzenia rozszerzeń do Chrome platforma umożliwiała deweloperom udostępnianie funkcji rozszerzeń bezpośrednio w interfejsie Chrome na najwyższym poziomie za pomocą czynności. Działanie to przycisk z ikoną, który może otwierać wyskakujące okienka lub uruchamiać niektóre funkcje rozszerzenia. Wcześniej Chrome obsługiwało 2 rodzaje działań: działania przeglądarki i działania strony. Manifest V3 zmienił to, konsolidując ich funkcjonalność w nowym interfejsie API chrome.action.

Krótka historia działań rozszerzeń

Chociaż chrome.action jest nowością w Manifest V3, jego podstawowe funkcje pochodzą z czasu, gdy rozszerzenia zostały po raz pierwszy udostępnione w wersji stabilnej w styczniu 2010 r. Pierwsza stabilna wersja platformy rozszerzeń Chrome obsługiwała 2 rodzaje działań: działania przeglądarkidziałania na stronie.

Działania w przeglądarce umożliwiały deweloperom wyświetlanie ikony „na głównym pasku narzędzi Google Chrome, po prawej stronie paska adresu” (źródło) oraz łatwe uruchamianie funkcji rozszerzenia na dowolnej stronie. Z kolei działania na stronie miały „reprezentować działania, które można wykonać na bieżącej stronie, ale które nie są dostępne na wszystkich stronach” (źródło).

W polu wyszukiwania (po lewej) pojawia się działanie na stronie, które wskazuje, że rozszerzenie może wykonać na niej określone działanie. Czynność przeglądarki (po prawej) jest zawsze widoczna.

Inaczej mówiąc, działania w przeglądarce zapewniły programistom rozszerzeń stały interfejs użytkownika, a działania strony pojawiały się tylko wtedy, gdy rozszerzenie mogło zrobić coś przydatnego na bieżącej stronie.

Oba typy działań były opcjonalne, więc deweloper rozszerzenia mógł nie podawać żadnych działań, podać działanie dotyczące strony lub działanie dotyczące przeglądarki (nie można było określić kilku działań).

Około 6 lat później w Chrome 49 wprowadzono nową wersję interfejsu dla rozszerzeń. Aby pomóc użytkownikom zrozumieć, jakie rozszerzenia mają, Chrome zaczął wyświetlać wszystkie aktywne rozszerzenia po prawej stronie paska adresu. Użytkownicy mogli „przenosić” rozszerzenia do menu Chrome.

Ukryte ikony rozszerzeń będą widoczne w menu Chrome.

Aby wyświetlać ikony dla każdego rozszerzenia, aktualizacja ta wprowadziła też 2 ważne zmiany w sposobie działania rozszerzeń w interfejsie Chrome. Po pierwsze, wszystkie rozszerzenia zaczęły wyświetlać ikony na pasku narzędzi. Jeśli rozszerzenie nie miało ikony, Chrome automatycznie ją wygenerowało. Po drugie, działania dotyczące strony zostały przeniesione na pasek narzędzi obok działań przeglądarki i otrzymaliśmy możliwość rozróżniania ich stanów „pokaż” i „ukryj”.

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

Ta zmiana pozwoliła rozszerzeniom akcji na stronie działać zgodnie z oczekiwaniami, ale z czasem zmniejszyła też rolę akcji na stronie. Jednym z efektów przeprojektowania interfejsu było to, że działania na stronie zostały w efekcie wchłonięte przez działania przeglądarki. Ponieważ wszystkie rozszerzenia były widoczne na pasku narzędzi, użytkownicy oczekiwali, że kliknięcie ikony rozszerzenia na pasku narzędzi spowoduje jego uruchomienie. W związku z tym działania w przeglądarce stały się coraz ważniejszą interakcją w przypadku rozszerzeń Chrome.

Zmiany w pliku manifestu V3

W latach po przeprojektowaniu interfejsu rozszerzeń w 2016 r. interfejs Chrome i rozszerzenia nadal się rozwijały, ale działania w przeglądarce i działania na stronie pozostały w dużej mierze niezmienione. Tak było przynajmniej do momentu, gdy zaczęliśmy planować modernizację platformy rozszerzeń za pomocą Manifestu V3.

Zespół ds. rozszerzeń stwierdził, że różnica między działaniami w przeglądarce a działaniami na stronie staje się coraz bardziej bezcelowa. Co gorsza, subtelne różnice w działaniu sprawiały, że deweloperzy mogli trudno wybrać, którego z nich użyć. Zdaliśmy sobie sprawę, że możemy rozwiązać te problemy, łącząc działanie przeglądarki i działanie strony w jedną „akcję”.

Wpisz interfejs API Action. Interfejs chrome.action jest najbardziej zbliżony do interfejsu chrome.browserAction, ale ma kilka istotnych różnic.

Po pierwsze, chrome.action wprowadza nową metodę o nazwie getUserSettings(). Ta metoda daje deweloperom rozszerzeń możliwość sprawdzenia, czy użytkownik przypiął 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 w porównaniu z np. „isPinned”, ale historia działań w Chrome pokazuje, że interfejs przeglądarki zmienia się szybciej niż interfejsy API rozszerzeń. Dlatego naszym celem jest udostępnienie interfejsów ogólnych dla preferencji użytkownika związanych z działaniami, aby zminimalizować przyszłe zmiany interfejsów API. Pozwala to też innym dostawcom przeglądarek ujawniać typowe koncepcje interfejsu użytkownika 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 deklaratywnego Content API. To ważne, ponieważ pozwala rozszerzeniom reagować na zachowanie użytkownika podczas przeglądania bez uzyskiwania dostępu do treści czy adresów URL odwiedzanych przez niego stron. Zobaczmy na przykład, jak rozszerzenie może włączyć działanie, gdy użytkownik odwiedza strony w domenie 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 identyczny z tym, co rozszerzenie robi z działaniem na stronie. Jedyna różnica polega na tym, że w pliku manifestu V3 używamy declarativeContent.ShowAction zamiast declarativeContent.ShowPageAction.

Blokady treści mogą też używać metody interfejsu deklaratywnego NetRequest API (setExtensionActionOptions) do wyświetlania liczby żądań zablokowanych przez rozszerzenie na danej karcie. Ta funkcja jest ważna, ponieważ pozwala blokadom treści informować użytkowników bez ujawniania potencjalnie wrażliwych metadanych przeglądania rozszerzeniu.

Podsumowanie

Modernizacja platformy rozszerzeń Chrome była jednym z głównych powodów wprowadzenia Manifestu V3. W wielu przypadkach oznaczało to przejście na nowe technologie, ale też uproszczenie sposobu korzystania z interfejsów API – oto nam zależało.

Mam nadzieję, że ten post pomoże Ci lepiej zrozumieć ten aspekt platformy Manifest V3. Aby dowiedzieć się więcej o tym, jak zespół Chrome podchodzi do przyszłości rozszerzeń przeglądarki, zapoznaj się z tymi stronami w dokumentacji dla deweloperów: wizja platformyomówienie Manifestu V3. Rozszerzenia do Chrome możesz też omówić z innymi programistami z grupy dyskusyjnej Google dotyczącej Chromium-extensions.