Les services workers d'extension sont compatibles avec les événements de service worker standard et de nombreux événements des API d'extension. Cette section décrit les options disponibles et fournit des conseils pour les utiliser.
Déclarer des événements d'extension
Les gestionnaires d'événements dans les service workers doivent être déclarés dans le champ d'application global, ce qui signifie qu'ils doivent se trouver au niveau supérieur du script et ne pas être imbriqués dans des fonctions. Cela garantit qu'ils sont enregistrés de manière synchrone lors de l'exécution initiale du script, ce qui permet à Chrome de distribuer des événements au service worker dès son démarrage. Exemple :
chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); chrome.action.onClicked.addListener(handleActionClick); });
chrome.action.onClicked.addListener(handleActionClick); chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); });
Événements courants
Les service workers d'extension acceptent les événements dans des API spécifiques. En voici quelques-uns courants. Notez que certaines de ces API nécessitent des autorisations pour être utilisées, et que d'autres peuvent comporter des événements, des méthodes ou des propriétés qui ne sont pas disponibles dans toutes les versions de Chrome. Pour en savoir plus, consultez la documentation de l'API associée, en particulier les événements, les méthodes ou les propriétés que vous souhaitez utiliser.
chrome.action
- Déclenché en réponse à une interaction de l'utilisateur avec l'icône de la barre d'outils de votre extension, que cette action soit destinée à une page (un onglet) spécifique ou à l'ensemble de l'extension.
chrome.management
- Fournit des événements liés à l'installation, à la désinstallation, à l'activation et à la désactivation des extensions.
chrome.notifications
- Fournit des événements liés à l'interaction de l'utilisateur avec les notifications système générées par l'extension.
chrome.permissions
- Indique quand les autorisations d'extension sont accordées ou révoquées par l'utilisateur.
chrome.runtime
- Fournit des événements liés au cycle de vie de l'extension, des messages envoyés à partir d'autres parties de l'extension et une notification d'extension ou de mise à jour de Chrome disponibles.
chrome.storage.onChanged
- Généré chaque fois qu'un objet
StorageArea
est effacé ou que la valeur d'une clé est modifiée ou définie. Notez que chaque instanceStorageArea
possède son propre événementonChanged
. chrome.webNavigation
- Fournit des informations sur l'état des requêtes de navigation en vol.
Filtres
Pour limiter les événements à un cas d'utilisation spécifique ou éliminer les appels d'événements inutiles, utilisez des API compatibles avec les filtres d'événements. Prenons l'exemple d'une extension qui écoute l'événement tabs.onUpdated
pour détecter quand un utilisateur accède à un site Web spécifique. Cet événement sera appelé à chaque navigation dans chaque onglet. Utilisez plutôt webNavigation.onCompleted
avec un filtre. Exemple :
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
chrome.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
Événements de service Web Worker
Les travailleurs de service d'extension sont compatibles avec plus d'événements de cycle de vie que ceux décrits ailleurs.
ServiceWorkerGlobal.fetch
Déclenché lorsqu'un élément est récupéré à partir du package d'extension ou lorsque fetch()
et XMLHttpRequest()
sont appelés à partir d'un script d'extension ou de pop-up. (Les appels provenant de scripts de contenu ne sont pas interceptés par le gestionnaire fetch
du service worker.) Dans ce dernier cas, vous devez ajouter les URL des pages que vous souhaitez extraire à la clé "host_permissions"
dans manifest.json
.
ServiceWorkerGlobal.message
Le transfert de messages de service worker est disponible en plus du transfert de messages des extensions, mais les deux systèmes ne sont pas interopérables. Cela signifie que les messages envoyés à l'aide de sendMessage()
(disponible dans plusieurs API d'extension) ne sont pas interceptés par les gestionnaires de messages du service worker. De même, les messages envoyés à l'aide de postMessage()
ne sont pas interceptés par les gestionnaires de messages d'extension. Les deux types de gestionnaires de messages (ServiceWorkerGlobal.message
et chrome.runtime.onMessage
) sont compatibles avec les service workers d'extension.
Nous vous recommandons d'utiliser la messagerie d'extension, sauf si vous avez une raison spécifique d'utiliser la messagerie de service worker.