Novità di Chrome 116 per le estensioni

Chrome 116 è ora disponibile in versione beta e include molti aggiornamenti interessanti per gli sviluppatori di estensioni di Chrome. Diamo una rapida occhiata alle novità.

Sebastian Benz
Sebastian Benz

Aprire un riquadro laterale in modo programmatico

Sidepanel è una delle funzionalità più richieste nelle estensioni di Chrome ed è disponibile in Chrome dalla versione 114. Dopo il lancio dell'API Side Panel, uno dei primi feedback che abbiamo ricevuto è stato che gli sviluppatori volevano un modo per aprire un riquadro laterale in modo programmatico. Eccola: chrome.sidePanel.open è ora in versione beta. Puoi utilizzarlo per aprire il riquadro laterale dell'estensione in modo programmatico in risposta a un'interazione utente, ad esempio un clic sul menu contestuale:

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 });
  }
});

Supporto di WebSocket nei Service worker

Il supporto di WebSocket è fondamentale per molte estensioni che prevedono il passaggio a Manifest V3. Chrome 116 migliora ulteriormente il supporto di WebSocket nei Service worker, in quanto tutte le attività WebSocket reimpostano il timer di inattività del service worker di 30 secondi. Ciò significa che finché il tuo WebSocket è attivo, il service worker rimarrà attivo.

Puoi utilizzarla per implementare un meccanismo keepalive che garantisca che il service worker rimanga attivo mentre attendi i messaggi provenienti dal server, anche se sono necessari più di 30 secondi prima dell'arrivo del messaggio successivo:

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
  );
}

Consulta la nostra nuova guida e un esempio di WebSocket per ulteriori dettagli.

Keepalive solido per i lavoratori del servizio

Parlando di ciclo di vita dei service worker, è arrivato un altro importante aggiornamento: il keepalive efficace per le API che richiedono l'interazione dell'utente. Le API che richiedono un'interazione da parte dell'utente avranno keepalive "forti" per i service worker delle estensioni (ovvero consentiranno al worker di impiegare più di cinque minuti per questa attività):

Registrazione di audio e video in background

Un altro divario tra Manifest V2 e Manifest V3 è stato colmato: puoi registrare audio e video in background utilizzando tabCapture e documenti fuori schermo. Utilizza l'API chrome.tabCapture in un service worker per ottenere un ID stream dopo un gesto dell'utente. Questi dati possono essere trasferiti a un documento fuori schermo per avviare la registrazione.

Consulta la nostra guida di tabCapture aggiornata per scoprire come funziona oppure, per un esempio funzionante, guarda l'esempio di Acquisizione schede - Registratore.

Nuova API: runtime.getContexts()

La nuova API runtime.getContexts() ti consente di recuperare informazioni sui contesti attivi associati alle tue estensioni. Ad esempio, puoi utilizzarlo per verificare se è presente un documento fuori schermo attivo:

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

Nuovo motivo fuori schermo: GEOLOCATION

geolocation è stato aggiunto come un altro motivo valido per l'utilizzo di un documento fuori schermo. Consulta la nostra guida all'utilizzo della geolocalizzazione per scoprire di più su come ottenere la posizione geografica dell'estensione utilizzando l'API Offscreen.

chrome.action.setBadgeText()

L'app action.setBadgeText è stata aggiornata per risolvere un'incoerenza tra Manifest V2 e Manifest V3. Se trasmetti una stringa vuota o null a action.setBadgeText, il testo del badge per la scheda specificata verrà cancellato e verrà utilizzato per impostazione predefinita il testo del badge globale.

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

Riepilogo: un altro passo verso Manifest V3

Con il miglioramento del supporto a vita dei Service Worker e l'aggiornamento dell'API Tab Capture, abbiamo continuato a fare progressi per raggiungere il nostro obiettivo di colmare il divario di funzionalità tra Manifest V2 e V3. Per informazioni sullo stato attuale, consulta la pagina dei problemi noti.