Chrome 116 ist jetzt als Betaversion verfügbar und enthält viele interessante Updates für Entwickler von Chrome-Erweiterungen. Sehen wir uns die Neuerungen einmal genauer an.
Seitenleiste programmatisch öffnen
Die Seitenleiste ist eine der am häufigsten gewünschten Funktionen in Chrome-Erweiterungen und ist seit Chrome-Version 114 verfügbar. Nach der Einführung der Side Panel API haben wir von Entwicklern das Feedback erhalten, dass sie eine Möglichkeit zum programmatischen Öffnen einer Seitenleiste benötigen. Und hier ist sie: chrome.sidePanel.open
befindet sich jetzt in der Betaphase. Damit können Sie die Seitenleiste der Erweiterung programmatisch als Reaktion auf eine Nutzerinteraktion öffnen, z. B. einen Kontextmenüklick:
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 auf Manifest V3 umgestellt werden sollen, von entscheidender Bedeutung. In Chrome 116 wird die WebSocket-Unterstützung in Service Workern weiter verbessert, da durch alle WebSocket-Aktivitäten der 30-Sekunden-Leerlauf-Timer für Service Worker zurückgesetzt wird. Solange Ihr WebSocket aktiv ist, bleibt der Service Worker also aktiv.
Damit können Sie einen Keep-Alive-Mechanismus implementieren, der dafür sorgt, dass Ihr Service Worker aktiv bleibt, während Sie auf Nachrichten von Ihrem Server warten – auch wenn es länger 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.
2
0 * 1000
);
}
Weitere Informationen finden Sie in unserem neuen WebSocket-Leitfaden und im Beispiel.
Starke Keep-Alive-Funktion für Service Worker
Apropos Service Worker-Lebenszyklus: Es gibt eine weitere wichtige Aktualisierung: Strong Keepalive für APIs, die Nutzerinteraktion erfordern. APIs, die eine Nutzerinteraktion erfordern, haben „starke“ Keep-Alives für Erweiterungs-Service-Worker. Das bedeutet, dass der Worker für diese Aufgabe länger als 5 Minuten benötigt:
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
Audio- und Videoaufnahmen im Hintergrund
Eine weitere Lücke zwischen Manifest V2 und Manifest V3 wurde geschlossen: Sie können Audio und Video im Hintergrund mit tabCapture
und Offscreen-Dokumenten aufzeichnen. Verwenden Sie die chrome.tabCapture
API in einem Service Worker, um nach einer Nutzeraktion eine Stream-ID abzurufen. Dieser kann dann an ein Offscreen-Dokument übergeben werden, um die Aufzeichnung zu starten.
In unserem aktualisierten tabCapture
-Leitfaden erfahren Sie, wie das funktioniert. Ein funktionierendes Beispiel finden Sie im 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. Sie können damit beispielsweise prüfen, ob ein aktives Offscreen-Dokument vorhanden ist:
const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
(c) => c.contextType === 'OFFSCREEN_DOCUMENT
9;
);
Neuer Grund für die Offscreen-Anzeige: GEOLOCATION
geolocation
wurde als weiterer gültiger Grund für die Verwendung eines Offscreen-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 können.
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 globale Badge-Text verwendet.
action.setBadgeText({tabId: tabId, text: '
39;});
Zusammenfassung: Ein weiterer Schritt in Richtung Manifest V3
Durch die verbesserte Unterstützung der Lebensdauer von Service Workern und die aktualisierte TabCapture API sind wir unserem Ziel, die Funktionslücke zwischen Manifest V2 und V3 zu schließen, einen Schritt näher gekommen. Den aktuellen Status findest du auf der Seite mit bekannten Problemen.