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 un'occhiata alle novità.

Aprire un riquadro laterale tramite programmazione

Il riquadro laterale è 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 tramite programmazione. Ed 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 dell'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 worker di servizio

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

Puoi utilizzarlo per implementare un meccanismo keepalive che garantisca che il tuo service worker rimanga attivo mentre aspetti i messaggi dal server, anche se sono necessari più di 30 secondi prima che arrivi il 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
  );
}

Per ulteriori dettagli, consulta la nostra nuova guida e il sample su WebSocket.

Keepalive efficace per i worker di servizio

A proposito del ciclo di vita dei worker di servizio, è stato rilasciato un altro aggiornamento importante: il keepalive avanzato per le API che richiedono l'interazione dell'utente. Le API che richiedono un'interazione con l'utente avranno keepalive "forti" per i worker di servizio delle estensioni (ovvero consentono al worker di impiegare più di 5 minuti per questa attività):

Registrazione di audio e video in background

Un'altra differenza tra Manifest V2 e Manifest V3 è stata colmata: ora puoi registrare audio e video in background utilizzando i documenti tabCapture e offscreen. Utilizza l'API chrome.tabCapture in un service worker per ottenere un ID stream dopo un gesto dell'utente. Questo può essere passato a un documento offscreen per avviare la registrazione.

Consulta la nostra guida aggiornata su tabCapture per scoprire come funziona o, per un esempio pratico, guarda l'esempio Acquisizione scheda - 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 offscreen attivo:

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

Nuovo motivo offscreen: GEOLOCALIZZAZIONE

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

chrome.action.setBadgeText()

action.setBadgeText è stato aggiornato per risolvere un'incongruenza tra Manifest V2 e Manifest V3. Se passi una stringa vuota o null a action.setBadgeText, il testo del badge per la scheda specificata viene cancellato e viene utilizzato il testo del badge globale.

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

Riepilogo: un altro passo verso Manifest V3

Grazie al miglioramento del supporto del ciclo di vita dei worker di servizio e all'API TabCapture aggiornata, abbiamo continuato a fare progressi verso il nostro obiettivo di colmare il divario di funzionalità tra Manifest V2 e V3. Per conoscere lo stato attuale, consulta la nostra pagina dei problemi noti.