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 de manière programmatique. Et voici la bonne nouvelle : 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, comme un clic sur 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é 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é WebSocket dans les service workers, car toute activité WebSocket réinitialisera le délai d'inactivité de 30 secondes des service workers. 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 maintien en vie qui garantit que votre service worker reste actif pendant que vous attendez des messages de votre serveur, même si le prochain message arrive dans 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.
2
0 * 1000
);
}
Pour en savoir plus, consultez notre nouveau guide et notre exemple WebSocket.
Keep-alive fort pour les service workers
En parlant du cycle de vie des service workers, une autre mise à jour importante a été déployée : le keep-alive fort pour les API nécessitant une interaction de l'utilisateur. Les API qui nécessitent une interaction utilisateur auront des signaux de maintien de connexion "forts" pour les workers de service d'extension (c'est-à-dire qu'elles autorisent le worker à prendre plus de cinq minutes pour cette tâche) :
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
Enregistrement audio et vidéo en arrière-plan
Une autre lacune entre Manifest V2 et Manifest V3 a été comblée : vous pouvez enregistrer de l'audio et de la 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 suite à un geste de l'utilisateur. Il peut ensuite être transmis à 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 pratique, consultez l'exemple Tab Capture – Recorder.
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 s'il existe un document hors écran actif :
const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
(c) => c.contextType === 'OFFSCREEN_DOCUMENT
9;
);
Nouveau motif hors écran : GEOLOCATION
geolocation
a été ajouté comme motif valable pour utiliser un document hors écran. Consultez notre guide sur l'utilisation de la géolocalisation pour savoir 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 corriger 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: '
39;});
Résumé : une étape supplémentaire vers Manifest V3
Grâce à la prise en charge améliorée de la durée de vie des Service Workers et à l'API TabCapture mise à jour, nous avons continué à progresser vers notre objectif de combler le fossé entre les fonctionnalités de Manifest V2 et V3. Consultez notre page Problèmes connus pour connaître l'état actuel.