Chrome 116 est désormais disponible en version bêta et inclut de nombreuses nouveautés intéressantes pour les développeurs d'extensions Chrome. Découvrons ensemble les nouveautés.
Ouvrir un panneau latéral de manière programmatique
Le panneau latéral est l'une des fonctionnalités les plus demandées dans les extensions Chrome. Il est disponible dans Chrome depuis la version 114. Après le lancement de l'API Side Panel, l'un des premiers commentaires que nous avons reçus était que les développeurs souhaitaient pouvoir ouvrir un panneau latéral par programmation. Et voilà: chrome.sidePanel.open
est désormais disponible en version bêta. Vous pouvez l'utiliser pour ouvrir le panneau latéral de l'extension de manière programmatique en réponse à une interaction de l'utilisateur, par exemple un clic dans un menu contextuel:
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 });
}
});
Compatibilité avec WebSocket dans les service workers
La compatibilité avec WebSocket est essentielle pour de nombreuses extensions qui prévoient de passer à Manifest V3. Chrome 116 améliore encore la compatibilité avec WebSocket dans les service workers, car toute activité WebSocket réinitialise le délai d'inactivité de 30 secondes du service worker. Cela signifie que tant que votre WebSocket est actif, le service worker reste actif.
Vous pouvez l'utiliser pour implémenter un mécanisme de keepalive qui garantit que votre service worker reste actif pendant que vous attendez des messages de votre serveur, même si l'arrivée du prochain message prend plus de 30 secondes:
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
);
}
Pour en savoir plus, consultez notre nouveau guide et notre exemple sur WebSockets.
Maintien de la connexion fort pour les services workers
En parlant du cycle de vie des service workers, une autre mise à jour importante est disponible: le keepalive strict pour les API nécessitant une interaction utilisateur. Les API qui nécessitent une interaction utilisateur auront des "keepalives" "forts" pour les nœuds de calcul de service d'extension (c'est-à-dire, ils autorisent le nœud de calcul à prendre plus de cinq minutes pour cette tâche):
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
Enregistrer de l'audio et de la vidéo en arrière-plan
Un autre écart entre Manifest V2 et Manifest V3 a été comblé: vous pouvez enregistrer des contenus audio et vidéo en arrière-plan à l'aide de tabCapture
et de documents hors écran. Utilisez l'API chrome.tabCapture
dans un service worker pour obtenir un ID de flux après un geste utilisateur. Vous pouvez ensuite le transmettre à un document hors écran pour démarrer l'enregistrement.
Consultez notre guide tabCapture
mis à jour pour en savoir plus sur son fonctionnement ou, pour obtenir un exemple concret, consultez l'exemple Capture d'onglets – Enregistreur.
Nouvelle API: runtime.getContexts()
La nouvelle API runtime.getContexts()
vous permet d'extraire des informations sur les contextes actifs associés à vos extensions. Par exemple, vous pouvez l'utiliser pour vérifier si un document hors écran est actif:
const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
(c) => c.contextType === 'OFFSCREEN_DOCUMENT'
);
Nouveau motif hors écran: GEOLOCATION
geolocation
a été ajouté comme autre raison valide d'utiliser un document hors écran. Consultez notre guide sur l'utilisation de la géolocalisation pour découvrir comment obtenir la position géographique de l'extension à l'aide de l'API Offscreen.
chrome.action.setBadgeText()
action.setBadgeText
a été mis à jour pour résoudre une incohérence entre Manifest V2 et Manifest V3. Si vous transmettez une chaîne vide ou null
à action.setBadgeText
, le texte du badge de l'onglet spécifié sera effacé et le texte du badge global sera utilisé par défaut.
action.setBadgeText({tabId: tabId, text: ''});
Résumé: une nouvelle étape vers Manifest V3
Grâce à une meilleure prise en charge de la durée de vie des services workers et à la mise à jour de l'API TabCapture, nous avons continué à progresser vers notre objectif de combler l'écart de fonctionnalités entre les versions 2 et 3 du fichier manifeste. Consultez notre page des problèmes connus pour connaître l'état actuel.