Nowości w Chrome 116 dotyczące rozszerzeń

Chrome 116 jest teraz dostępny w wersji beta i zawiera wiele ciekawych aktualizacji dla deweloperów rozszerzeń do Chrome. Zobaczmy, co się zmieniło.

Sebastian Benz
Sebastian Benz

Automatyczne otwieranie panelu bocznego

Panel boczny to jedna z najczęściej poszukiwanych funkcji rozszerzeń do Chrome. Jest ona dostępna w Chrome od wersji 114. Po wprowadzeniu interfejsu Side Panel API zauważyliśmy, że deweloperzy chcą mieć możliwość automatycznego otwierania panelu bocznego. Oto wiadomość: narzędzie chrome.sidePanel.open jest obecnie w wersji beta. Dzięki niemu możesz automatycznie otwierać panel boczny rozszerzenia w odpowiedzi na interakcję użytkownika, np. kliknięcie menu kontekstowego:

chrome.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === 'openSidePanel') {
    // This will open the panel in all the pages on the current window.
    chrome.sidePanel.open({ windowId: tab.windowId });
  }
});

Obsługa WebSocket w instancjach Service Worker

Obsługa WebSocket jest niezbędna dla wielu rozszerzeń, które planują przejść na platformę Manifest V3. Chrome 116 dodatkowo ulepsza obsługę WebSocket w skryptach service worker, ponieważ cała aktywność związana z WebSocket powoduje zresetowanie licznika czasu bezczynności skryptu 30 s. Oznacza to, że dopóki protokół WebSocket jest aktywny, skrypt service worker będzie aktywny.

Możesz użyć tego sposobu, aby wdrożyć mechanizm utrzymywania aktywności, dzięki któremu skrypt service worker pozostaje aktywny podczas oczekiwania na wiadomości z serwera, nawet jeśli do nadejścia kolejnej wiadomości czeka ponad 30 sekund:

function keepAlive() {
  const keepAliveIntervalId = setInterval(
    () => {
      if (webSocket) {
        webSocket.send('keepalive');
      } else {
        clearInterval(keepAliveIntervalId);
      }
    },
    // It's important to pick an interval that's shorter than 30s, to
    // avoid that the service worker becomes inactive.
    20 * 1000
  );
}

Więcej informacji znajdziesz w naszym nowym przewodniku i przykładzie WebSocket.

Silne utrzymywanie aktywności mechanizmów Service Worker

Skoro już mowa o cyklu życia mechanizmów Service Worker, wprowadziliśmy kolejną ważną aktualizację: silne utrzymanie działania interfejsów API, które wymagają interakcji użytkownika. Interfejsy API, które wymagają interakcji z użytkownikiem, będą miały „silne” utrzymywania aktywności instancji roboczych usług rozszerzeń (tzn. umożliwi to instancji roboczej dłużej niż 5 minut wykonania tego zadania):

Nagrywanie dźwięku i filmu w tle

Została usunięta kolejna luka między platformami Manifest V2 i Manifest V3. Możesz nagrywać dźwięk i obraz w tle za pomocą tabCapture i dokumentów poza ekranem. Użyj interfejsu API chrome.tabCapture w skrypcie service worker, aby uzyskać identyfikator strumienia za pomocą gestu użytkownika. Można je następnie przekazać do dokumentu poza ekranem, aby rozpocząć nagrywanie.

Zapoznaj się ze zaktualizowanym przewodnikiem po usłudze tabCapture, aby dowiedzieć się, jak to działa, lub zapoznaj się z przykładem korzystania z tej funkcji (Tab Capture – Dyktafon).

Nowy interfejs API: challenge.getContexts()

Nowy interfejs API runtime.getContexts() umożliwia pobieranie informacji o aktywnych kontekstach powiązanych z rozszerzeniami. W ten sposób możesz na przykład sprawdzić, czy jest aktywny dokument poza ekranem:

const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
    (c) => c.contextType === 'OFFSCREEN_DOCUMENT'
  );

Nowy powód wyłączenia ekranu: GEOLOCATION

Adres geolocation został dodany jako kolejny prawidłowy powód korzystania z dokumentu poza ekranem. Aby dowiedzieć się więcej o tym, jak uzyskać lokalizację geograficzną rozszerzenia za pomocą interfejsu Offscreen API, zapoznaj się z naszym przewodnikiem dotyczącym korzystania z geolokalizacji.

chrome.action.setBadgeText()

Usługa action.setBadgeText została zaktualizowana w celu rozwiązania niespójności między platformami Manifest V2 i Manifest V3. Przekazywanie pustego ciągu znaków lub wartości null do action.setBadgeText spowoduje usunięcie tekstu plakietki na określonej karcie i zastąpienie go globalnym tekstem plakietki.

action.setBadgeText({tabId: tabId, text: ''});

Podsumowanie: kolejny krok w kierunku platformy Manifest V3

Ulepszona obsługa wszystkich mechanizmów Service Worker i zaktualizowany interfejs TabCapture API nieustannie dążą do realizacji naszego celu, którym jest zniwelowanie luki w funkcjach między Manifest V2 a V3. Aktualny stan możesz sprawdzić na stronie znanych problemów.