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 in modo programmatico

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 in modo programmatico. Ed ecco la novità: 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 service worker

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

Puoi utilizzarlo per implementare un meccanismo keepalive che garantisca che il service worker rimanga attivo mentre aspetti i messaggi dal server, anche se ci vogliono 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 nostro esempio di WebSocket.

Keepalive avanzato per i service worker

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

Registrazione di audio e video in background

È stata colmata un'altra lacuna tra Manifest V2 e Manifest V3: ora 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. che può essere passato a un documento fuori schermo per avviare la registrazione.

Consulta la nostra guida tabCapture aggiornata per scoprire come funziona o, per un esempio pratico, consulta l'esempio Tab Capture - Recorder.

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

Nuovo motivo di visualizzazione offscreen: GEOLOCALIZZAZIONE

geolocation è stato aggiunto come altro motivo valido per l'utilizzo di un documento fuori schermo. Consulta la nostra guida 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'incoerenza tra Manifest V2 e Manifest V3. Se passi una stringa vuota o null a action.setBadgeText, il testo del badge per la scheda specificata verrà cancellato e verrà utilizzato il testo del badge globale predefinito.

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

Riepilogo: un altro passo verso Manifest V3

Grazie al miglioramento del supporto della durata del service worker 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. Consulta la nostra pagina dei problemi noti per lo stato attuale.