Neu in Chrome 116 für Erweiterungen

Chrome 116 ist jetzt als Betaversion verfügbar und enthält viele spannende Updates für Entwickler von Chrome-Erweiterungen. Werfen wir einen kurzen Blick auf die Neuerungen.

Sebastian Benz
Sebastian Benz

Seitenleiste programmatisch öffnen

Seitenleiste ist eine der am häufigsten gewünschten Funktionen in Chrome-Erweiterungen und ist seit Version 114 in Chrome verfügbar. Nach der Einführung der Side Panel API war eines der ersten Rückmeldungen, die wir erhalten haben, dass Entwickler sich eine Möglichkeit wünschen, eine Seitenleiste programmatisch zu öffnen. Und hier ist sie: chrome.sidePanel.open ist jetzt in der Betaphase. Sie können damit die Seitenleiste der Erweiterung als Reaktion auf eine Nutzerinteraktion wie einen Klick auf das Kontextmenü programmatisch öffnen:

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

WebSocket-Unterstützung in Service Workern

Die WebSocket-Unterstützung ist für viele Erweiterungen, die zu Manifest V3 wechseln möchten, von entscheidender Bedeutung. Mit Chrome 116 wird die WebSocket-Unterstützung für Service Worker weiter verbessert, da bei allen WebSocket-Aktivitäten der Timer für die Inaktivität für 30 Sekunden des Service Workers zurückgesetzt wird. Das bedeutet, dass der Service Worker so lange aktiv ist, wie Ihr WebSocket aktiv ist.

Sie können dies verwenden, um einen Keepalive-Mechanismus zu implementieren, der sicherstellt, dass Ihr Service Worker aktiv bleibt, während Sie auf Nachrichten von Ihrem Server warten – selbst wenn es mehr als 30 Sekunden dauert, bis die nächste Nachricht eintrifft:

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

Weitere Informationen finden Sie in unserem neuen WebSocket-Leitfaden und dem neuen Beispiel.

Starkes Keepalive für Service Worker

Apropos Service Worker-Lebenszyklus: Ein weiteres wichtiges Update ist gelandet: starkes Keepalive für APIs, die Nutzerinteraktionen erfordern. APIs, die eine Nutzerinteraktion erfordern, haben für Erweiterungs-Service-Worker "starke" Keepalives, d.h., es kann dem Worker für diese Aufgabe länger als 5 Minuten dauern:

Audio und Video werden im Hintergrund aufgenommen

Außerdem wurde eine weitere Lücke zwischen Manifest V2 und Manifest V3 geschlossen: Du kannst Audio- und Videoinhalte mit tabCapture im Hintergrund und nicht auf dem Bildschirm sichtbare Dokumente aufnehmen. Verwenden Sie die chrome.tabCapture API in einem Service Worker, um nach einer Nutzergeste eine Stream-ID abzurufen. Sie können die Datei dann an ein offenes Dokument übergeben, um mit der Aufzeichnung zu beginnen.

In unserem aktualisierten tabCapture-Leitfaden erfahren Sie, wie das funktioniert, oder sehen Sie sich das Beispiel Tab Capture – Rekorder an.

Neue API: runtime.getContexts()

Mit der neuen runtime.getContexts() API können Sie Informationen zu aktiven Kontexten abrufen, die mit Ihren Erweiterungen verknüpft sind. So können Sie beispielsweise prüfen, ob ein aktives nicht sichtbares Dokument vorhanden ist:

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

Neuer nicht sichtbarer Grund: GEOLOCATION

geolocation wurde als weiterer legitimer Grund für die Verwendung eines nicht sichtbaren Dokuments hinzugefügt. Weitere Informationen dazu, wie Sie mit der Offscreen API den geografischen Standort einer Erweiterung ermitteln, finden Sie hier.

chrome.action.setBadgeText()

action.setBadgeText wurde aktualisiert, um eine Inkonsistenz zwischen Manifest V2 und Manifest V3 zu beheben. Wenn Sie einen leeren String oder null an action.setBadgeText übergeben, wird der Badge-Text für den angegebenen Tab gelöscht und stattdessen der allgemeine Badge-Text verwendet.

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

Zusammenfassung: Ein weiterer Schritt hin zu Manifest V3

Mit dem verbesserten Lifetime-Support für Service Worker und der aktualisierten TabCapture API sind wir unserem Ziel, die Funktionslücke zwischen Manifest V2 und V3 zu schließen, weiter gekommen. Den aktuellen Status finden Sie auf unserer Seite mit bekannten Problemen.