Nowości w Chrome 116 dotyczące rozszerzeń

Chrome 116 jest już dostępny w wersji beta i zawiera wiele ciekawych nowości dla deweloperów rozszerzeń do Chrome. Przyjrzyjmy się nowościom.

Programowe otwieranie panelu bocznego

Panel boczny to jedna z najczęściej zgłaszanych funkcji rozszerzeń do Chrome. Jest dostępny w Chrome od wersji 114. Po wprowadzeniu interfejsu Side Panel API jednym z pierwszych zgłoszeń, które otrzymaliśmy, była prośba deweloperów o możliwość programowego otwierania panelu bocznego. Oto ona: chrome.sidePanel.open jest teraz w wersji beta. Możesz go używać do programowego otwierania panelu bocznego 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 usługach Service Worker

Obsługa protokołu WebSocket jest kluczowa dla wielu rozszerzeń, które planują przejście na platformę Manifest V3. Chrome 116 jeszcze bardziej ulepsza obsługę WebSocket w service workerach, ponieważ cała aktywność WebSocket będzie resetować 30-sekundowy licznik czasu bezczynności service workera. Oznacza to, że dopóki protokół WebSocket jest aktywny, proces roboczy usługi będzie działać.

Możesz użyć tej funkcji do wdrożenia mechanizmu podtrzymywania połączenia, który zapewni aktywność skryptu service worker podczas oczekiwania na wiadomości z serwera, nawet jeśli następna wiadomość dotrze po ponad 30 sekundach:

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 przewodnikuprzykładzie dotyczącym WebSocket.

Silne utrzymywanie aktywności w przypadku Service Workerów

W kontekście cyklu życia service workerów pojawiła się kolejna ważna aktualizacja: silne utrzymywanie połączenia w przypadku interfejsów API wymagających interakcji użytkownika. Interfejsy API, które wymagają interakcji użytkownika, będą miały „silne” sygnały keep-alive dla procesów roboczych usługi rozszerzenia (tzn. pozwolą procesowi roboczemu na wykonanie tego zadania w czasie dłuższym niż 5 minut):

Nagrywanie dźwięku i obrazu w tle

Kolejna różnica między platformami Manifest V2 i Manifest V3 została zlikwidowana: możesz nagrywać dźwięk i obraz w tle za pomocą interfejsu tabCapture i dokumentów poza ekranem. Użyj interfejsu chrome.tabCapture API w procesie roboczym usługi, aby uzyskać identyfikator strumienia po działaniu użytkownika. Można go następnie przekazać do dokumentu poza ekranem, aby rozpocząć nagrywanie.

Aby dowiedzieć się, jak to działa, zapoznaj się z naszym zaktualizowanym tabCaptureprzewodnikiem. Przykładowe działanie znajdziesz w przykładowym kodzie Tab Capture – Recorder.

Nowy interfejs API: runtime.getContexts()

Nowy interfejs runtime.getContexts() API umożliwia pobieranie informacji o aktywnych kontekstach powiązanych z rozszerzeniami. Możesz na przykład sprawdzić, czy istnieje aktywny dokument poza ekranem:

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

Nowy powód wyświetlania poza ekranem: GEOLOCATION

geolocation został dodany jako kolejny uzasadniony powód używania dokumentu poza ekranem. Więcej informacji o uzyskiwaniu położenia geograficznego rozszerzenia za pomocą interfejsu Offscreen API znajdziesz w naszym przewodniku korzystania z geolokalizacji.

chrome.action.setBadgeText()

action.setBadgeText został zaktualizowany, aby rozwiązać problem z niezgodnością między platformami Manifest V2 i Manifest V3. Przekazanie pustego ciągu znaków lub null do action.setBadgeText spowoduje wyczyszczenie tekstu plakietki na określonej karcie i przywrócenie domyślnego tekstu plakietki globalnej.

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

Podsumowanie: kolejny krok w kierunku Manifestu V3

Dzięki ulepszonej obsłudze czasu życia Service Worker i zaktualizowanemu interfejsowi TabCapture API udało nam się poczynić dalsze postępy w realizacji celu, jakim jest zmniejszenie różnic w funkcjach między platformami Manifest V2 i V3. Aktualny stan znajdziesz na stronie znanych problemów.