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. Sehen wir uns die Neuerungen an.

Seitenleiste programmatisch öffnen

Die Seitenleiste ist eine der am häufigsten nachgefragten Funktionen in Chrome-Erweiterungen und ist seit Chrome-Version 114 verfügbar. Nach der Einführung der Side Panel API haben wir als eines der ersten Feedbacks erhalten, dass Entwickler eine Möglichkeit zum programmatischen Öffnen eines Seitenpanels wünschen. Und hier ist sie: chrome.sidePanel.open ist jetzt in der Betaphase. Sie können damit die Seitenleiste der Erweiterung programmatisch als Reaktion auf eine Nutzerinteraktion öffnen, z. B. einen Klick auf das Kontextmenü:

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 Workers

Die WebSocket-Unterstützung ist für viele Erweiterungen, die zu Manifest V3 migrieren möchten, entscheidend. In Chrome 116 wurde die WebSocket-Unterstützung in Service Workern weiter verbessert, da durch jede WebSocket-Aktivität der Inaktivitätstimer von 30 Sekunden für Service Worker zurückgesetzt wird. Solange Ihr WebSocket aktiv ist, bleibt der Service Worker aktiv.

So können Sie einen keepalive-Mechanismus implementieren, der dafür sorgt, dass Ihr Service Worker aktiv bleibt, während Sie auf Nachrichten von Ihrem Server warten – auch 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 findest du in unserem neuen WebSocket-Leitfaden und in der Beispielanwendung.

Starker keepalive für Service Worker

Apropos Dienstarbeiter-Lebenszyklus: Es gibt noch eine weitere wichtige Neuerung: einen starken keepalive für APIs, die eine Nutzerinteraktion erfordern. APIs, die eine Nutzerinteraktion erfordern, haben „strenge“ keepalives für Erweiterungs-Dienstworker (d.h., der Worker darf für diese Aufgabe länger als 5 Minuten benötigen):

Audio- und Videoaufnahmen im Hintergrund

Eine weitere Lücke zwischen Manifest V2 und Manifest V3 wurde geschlossen: Du kannst Audio- und Videoinhalte im Hintergrund mit tabCapture und Offscreen-Dokumenten aufzeichnen. Verwende die chrome.tabCapture API in einem Service Worker, um nach einer Nutzergeste eine Stream-ID abzurufen. Dieser kann dann an ein Offscreen-Dokument übergeben werden, um die Aufzeichnung zu starten.

Weitere Informationen zur Funktionsweise finden Sie in unserem aktualisierten tabCapture-Leitfaden. Ein funktionierendes Beispiel ist das Tab Capture – Recorder-Beispiel.

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 Dokument außerhalb des Bildschirms angezeigt wird:

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

Neuer Grund für die Auslieferung im Hintergrund: GEOLOCATION

geolocation wurde als weiterer gültiger Grund für die Verwendung eines nicht sichtbaren Dokuments hinzugefügt. In unserem Leitfaden zur Standortbestimmung erfahren Sie mehr darüber, wie Sie den geografischen Standort der Erweiterung mithilfe der Offscreen API abrufen.

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 bis action.setBadgeText übergeben, wird der Badge-Text für den angegebenen Tab gelöscht und stattdessen der globale Badge-Text verwendet.

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

Zusammenfassung: Ein weiterer Schritt in Richtung Manifest V3

Mit der verbesserten Lebensdauerunterstützung für Service Worker und der aktualisierten TabCapture API haben wir weitere Fortschritte bei unserem Ziel gemacht, die Funktionslücke zwischen Manifest V2 und V3 zu schließen. Den aktuellen Status findest du auf der Seite mit bekannten Problemen.