Description
Utilisez l'API chrome.webNavigation
pour recevoir des notifications sur l'état des requêtes de navigation en cours.
Autorisations
webNavigation
Toutes les méthodes et tous les événements chrome.webNavigation
nécessitent que vous déclariez l'autorisation "webNavigation"
dans le fichier manifeste de l'extension. Exemple :
{ "name": "My extension", ... "permissions": [ "webNavigation" ], ... }
Concepts et utilisation
Ordre de l'événement
Lorsqu'une navigation est effectuée avec succès, les événements sont déclenchés dans l'ordre suivant :
onBeforeNavigate -> onCommitted -> [onDOMContentLoaded] -> onCompleted
Toute erreur survenant au cours du processus entraîne un événement onErrorOccurred
. Pour une navigation spécifique, aucun autre événement n'est déclenché après onErrorOccurred
.
Si un frame de navigation contient des sous-frames, son onCommitted
est déclenché avant le onBeforeNavigate
de l'un de ses enfants, tandis que onCompleted
est déclenché après le onCompleted
de tous ses enfants.
Si le fragment de référence d'un frame est modifié, un événement onReferenceFragmentUpdated
est déclenché. Cet événement peut se déclencher à tout moment après onDOMContentLoaded
, même après onCompleted
.
Si l'API History est utilisée pour modifier l'état d'un frame (par exemple, à l'aide de history.pushState()
), un événement onHistoryStateUpdated
est déclenché. Cet événement peut se déclencher à tout moment après onDOMContentLoaded
.
Si une navigation restaure une page à partir du cache amélioré, l'événement onDOMContentLoaded
ne se déclenche pas. L'événement n'est pas déclenché, car le contenu a déjà été chargé lors de la première visite de la page.
Si une navigation a été déclenchée à l'aide de Chrome Instant ou des pages instantanées, une page entièrement chargée est insérée dans l'onglet actuel. Dans ce cas, un événement onTabReplaced
est déclenché.
Relation avec les événements webRequest
Il n'existe pas d'ordre défini entre les événements de l'API webRequest et ceux de l'API webNavigation. Il est possible que des événements webRequest soient toujours reçus pour des frames qui ont déjà commencé une nouvelle navigation, ou qu'une navigation ne se poursuive qu'une fois que les ressources réseau sont entièrement chargées.
En général, les événements webNavigation sont étroitement liés à l'état de navigation affiché dans l'UI, tandis que les événements webRequest correspondent à l'état de la pile réseau, qui est généralement opaque pour l'utilisateur.
ID d'onglet
Tous les onglets de navigation ne correspondent pas à des onglets réels dans l'UI de Chrome (par exemple, un onglet en cours de prérendu). Vous ne pouvez pas accéder à ces onglets à l'aide de l'API Tabs, ni demander d'informations à leur sujet en appelant webNavigation.getFrame()
ou webNavigation.getAllFrames()
. Une fois un tel onglet inséré, un événement onTabReplaced
est déclenché et il devient accessible via ces API.
Codes temporels
Il est important de noter que certaines bizarreries techniques dans la gestion des processus Chrome distincts par l'OS peuvent entraîner un décalage de l'horloge entre le navigateur lui-même et les processus d'extension. Cela signifie que la propriété timeStamp
de la propriété timeStamp
de l'événement WebNavigation
n'est garantie d'être cohérente qu'en interne. Comparer un événement à un autre vous donnera le décalage correct entre eux, mais les comparer à l'heure actuelle dans l'extension (à l'aide de (new Date()).getTime()
, par exemple) peut donner des résultats inattendus.
ID de frames
Les frames d'un onglet peuvent être identifiés par un ID de frame. L'ID du frame principal est toujours 0, tandis que celui des frames enfants est un nombre positif. Une fois qu'un document est construit dans un frame, son ID de frame reste constant pendant toute la durée de vie du document. Depuis Chrome 49, cet ID est également constant pendant toute la durée de vie du frame (pour plusieurs navigations).
En raison de la nature multiprocessus de Chrome, un onglet peut utiliser différents processus pour afficher la source et la destination d'une page Web. Par conséquent, si une navigation a lieu dans un nouveau processus, vous pouvez recevoir des événements à la fois de l'ancienne et de la nouvelle page jusqu'à ce que la nouvelle navigation soit validée (c'est-à-dire que l'événement onCommitted
est envoyé pour le nouveau frame principal). En d'autres termes, il est possible d'avoir plusieurs séquences d'événements webNavigation en attente avec le même frameId
. Les séquences peuvent être distinguées par la clé processId
.
Notez également que lors d'un chargement provisoire, le processus peut être modifié plusieurs fois. Cela se produit lorsque la charge est redirigée vers un autre site. Dans ce cas, vous recevrez des événements onBeforeNavigate
et onErrorOccurred
à plusieurs reprises, jusqu'à ce que vous receviez l'événement onCommitted
final.
Un autre concept problématique avec les extensions est le cycle de vie du frame. Un frame héberge un document (associé à une URL validée). Le document peut changer (par exemple, en naviguant), mais le frameId ne changera pas. Il est donc difficile d'associer un événement survenu dans un document spécifique à un frameId. Nous introduisons le concept de documentId, qui est un identifiant unique par document. Si un frame est parcouru et ouvre un nouveau document, l'identifiant change. Ce champ est utile pour déterminer quand les pages changent d'état de cycle de vie (entre prérendu/actif/mis en cache), car il reste le même.
Types et qualificatifs de transition
L'événement webNavigation
onCommitted
comporte une propriété transitionType
et une propriété transitionQualifiers
. Le type de transition est le même que celui utilisé dans l'API History, qui décrit comment le navigateur a accédé à cette URL spécifique. De plus, plusieurs qualificateurs de transition peuvent être renvoyés pour définir plus précisément la navigation.
Voici les qualificatifs de transition disponibles :
Qualificatif de transition | Description |
---|---|
"client_redirect" | Une ou plusieurs redirections provoquées par des balises JavaScript ou méta-actualisation sur la page se sont produites lors de la navigation. |
"server_redirect" | Une ou plusieurs redirections provoquées par des en-têtes HTTP envoyés par le serveur se sont produites lors de la navigation. |
"forward_back" | L'utilisateur a utilisé le bouton "Suivant" ou "Précédent" pour lancer la navigation. |
"from_address_bar" | L'utilisateur a lancé la navigation depuis la barre d'adresse (également appelée Omnibox). |
Exemples
Pour essayer cette API, installez l'exemple d'API webNavigation à partir du dépôt chrome-extension-samples.
Types
TransitionQualifier
Énumération
"client_redirect"
"server_redirect"
"forward_back"
"from_address_bar"
TransitionType
Cause de la navigation. Les mêmes types de transitions que ceux définis dans l'API History sont utilisés. Il s'agit des mêmes types de transition que ceux définis dans l'API History, sauf que "start_page"
remplace "auto_toplevel"
(pour la rétrocompatibilité).
Énumération
"link"
"typed"
"auto_bookmark"
"auto_subframe"
"manual_subframe"
"generated"
"start_page"
"form_submit"
"reload"
"keyword"
"keyword_generated"
Méthodes
getAllFrames()
chrome.webNavigation.getAllFrames(
details: object,
): Promise<object[] | undefined>
Récupère des informations sur tous les cadres d'un onglet donné.
Paramètres
- détails
objet
Informations sur l'onglet à partir duquel récupérer toutes les frames.
- tabId
Total
ID de l'onglet.
-
Renvoie
-
Promise<object[] | undefined>
Chrome 93 et versions ultérieures
getFrame()
chrome.webNavigation.getFrame(
details: object,
): Promise<object | undefined>
Récupère des informations sur le frame indiqué. Un frame fait référence à un <iframe> ou à un <frame> d'une page Web. Il est identifié par un ID d'onglet et un ID de frame.
Paramètres
- détails
objet
Informations sur le frame pour lequel récupérer des informations.
- documentId
chaîne facultative
Chrome 106 et versions ultérieuresUUID du document. Si les frameId et/ou tabId sont fournis, ils seront validés pour correspondre au document trouvé par l'ID de document fourni.
- frameId
number facultatif
ID du frame dans l'onglet donné.
- processId
number facultatif
Obsolète depuis Chrome 49Les cadres sont désormais identifiés de manière unique par leur ID d'onglet et leur ID de cadre. L'ID de processus n'est plus nécessaire et est donc ignoré.
ID du processus qui exécute le moteur de rendu pour cet onglet.
- tabId
number facultatif
ID de l'onglet dans lequel se trouve le frame.
-
Renvoie
-
Promise<object | undefined>
Chrome 93 et versions ultérieures
Événements
onBeforeNavigate
chrome.webNavigation.onBeforeNavigate.addListener(
callback: function,
filters?: object,
)
Déclenché lorsqu'une navigation est sur le point de se produire.
Paramètres
-
fonction
Le paramètre
callback
se présente comme suit :(details: object) => void
-
objet
- Chrome 106 et versions ultérieures
Cycle de vie du document.
-
Total
La valeur 0 indique que la navigation a lieu dans la fenêtre de contenu de l'onglet, tandis qu'une valeur positive indique une navigation dans un sous-frame. Les ID de frame sont uniques pour un onglet et un processus donnés.
- Chrome 106 et versions ultérieures
Type de frame dans lequel la navigation a eu lieu.
-
chaîne facultative
Chrome 106 et versions ultérieuresUUID du document parent propriétaire de ce frame. Cette valeur n'est pas définie s'il n'y a pas de parent.
-
Total
ID du frame parent ou
-1
s'il s'agit du frame principal. -
Total
Obsolète depuis Chrome 50L'ID de processus n'est plus défini pour cet événement, car le processus qui affichera le document résultant n'est connu qu'après onCommit.
Valeur -1.
-
Total
ID de l'onglet dans lequel la navigation est sur le point de se produire.
-
Total
Heure à laquelle le navigateur était sur le point de commencer la navigation, en millisecondes depuis l'epoch.
-
chaîne
-
-
-
object facultatif
-
Conditions que l'URL vers laquelle l'utilisateur est redirigé doit remplir. Les champs "schemes" et "ports" de UrlFilter sont ignorés pour cet événement.
-
onCommitted
chrome.webNavigation.onCommitted.addListener(
callback: function,
filters?: object,
)
Déclenché lorsqu'une navigation est validée. Le document (et les ressources auxquelles il fait référence, telles que les images et les sous-frames) est peut-être toujours en cours de téléchargement, mais au moins une partie du document a été reçue du serveur et le navigateur a décidé de passer au nouveau document.
Paramètres
- callback
fonction
Le paramètre
callback
se présente comme suit :(details: object) => void
- détails
objet
- documentId
chaîne
Chrome 106 et versions ultérieuresUUID du document chargé.
- documentLifecycleChrome 106 et versions ultérieures
Cycle de vie du document.
- frameId
Total
La valeur 0 indique que la navigation a lieu dans la fenêtre de contenu de l'onglet, tandis qu'une valeur positive indique une navigation dans un sous-frame. Les ID de frame sont uniques dans un onglet.
- frameTypeChrome 106 et versions ultérieures
Type de frame dans lequel la navigation a eu lieu.
- parentDocumentId
chaîne facultative
Chrome 106 et versions ultérieuresUUID du document parent propriétaire de ce frame. Cette valeur n'est pas définie s'il n'y a pas de parent.
- parentFrameId
Total
Chrome 74 et versions ultérieuresID du frame parent ou
-1
s'il s'agit du frame principal. - processId
Total
ID du processus qui exécute le moteur de rendu pour ce frame.
- tabId
Total
ID de l'onglet dans lequel la navigation a lieu.
- timeStamp
Total
Heure à laquelle la navigation a été validée, en millisecondes depuis l'epoch.
- transitionQualifiers
Liste des qualificatifs de transition.
- transitionType
Cause de la navigation.
- url
chaîne
-
-
- filtres
object facultatif
- url
Conditions que l'URL vers laquelle l'utilisateur est redirigé doit remplir. Les champs "schemes" et "ports" de UrlFilter sont ignorés pour cet événement.
-
onCompleted
chrome.webNavigation.onCompleted.addListener(
callback: function,
filters?: object,
)
Déclenché lorsqu'un document, y compris les ressources auxquelles il fait référence, est entièrement chargé et initialisé.
Paramètres
- callback
fonction
Le paramètre
callback
se présente comme suit :(details: object) => void
- détails
objet
- documentId
chaîne
Chrome 106 et versions ultérieuresUUID du document chargé.
- documentLifecycleChrome 106 et versions ultérieures
Cycle de vie du document.
- frameId
Total
La valeur 0 indique que la navigation a lieu dans la fenêtre de contenu de l'onglet, tandis qu'une valeur positive indique une navigation dans un sous-frame. Les ID de frame sont uniques dans un onglet.
- frameTypeChrome 106 et versions ultérieures
Type de frame dans lequel la navigation a eu lieu.
- parentDocumentId
chaîne facultative
Chrome 106 et versions ultérieuresUUID du document parent propriétaire de ce frame. Cette valeur n'est pas définie s'il n'y a pas de parent.
- parentFrameId
Total
Chrome 74 et versions ultérieuresID du frame parent ou
-1
s'il s'agit du frame principal. - processId
Total
ID du processus qui exécute le moteur de rendu pour ce frame.
- tabId
Total
ID de l'onglet dans lequel la navigation a lieu.
- timeStamp
Total
Heure à laquelle le document a fini de se charger, en millisecondes depuis l'epoch.
- url
chaîne
-
-
- filtres
object facultatif
- url
Conditions que l'URL vers laquelle l'utilisateur est redirigé doit remplir. Les champs "schemes" et "ports" de UrlFilter sont ignorés pour cet événement.
-
onCreatedNavigationTarget
chrome.webNavigation.onCreatedNavigationTarget.addListener(
callback: function,
filters?: object,
)
Déclenché lorsqu'une nouvelle fenêtre ou un nouvel onglet dans une fenêtre existante est créé pour héberger une navigation.
Paramètres
-
fonction
Le paramètre
callback
se présente comme suit :(details: object) => void
-
objet
-
Total
ID du frame avec sourceTabId dans lequel la navigation est déclenchée. 0 indique le frame principal.
-
Total
ID du processus qui exécute le moteur de rendu pour le frame source.
-
Total
ID de l'onglet dans lequel la navigation est déclenchée.
-
Total
ID de l'onglet dans lequel l'URL est ouverte
-
Total
Heure à laquelle le navigateur était sur le point de créer une vue (en millisecondes depuis l'epoch).
-
chaîne
URL à ouvrir dans la nouvelle fenêtre.
-
-
-
object facultatif
-
Conditions que l'URL vers laquelle l'utilisateur est redirigé doit remplir. Les champs "schemes" et "ports" de UrlFilter sont ignorés pour cet événement.
-
onDOMContentLoaded
chrome.webNavigation.onDOMContentLoaded.addListener(
callback: function,
filters?: object,
)
Déclenché lorsque le DOM de la page est entièrement construit, mais que les ressources référencées ne sont pas encore chargées.
Paramètres
- callback
fonction
Le paramètre
callback
se présente comme suit :(details: object) => void
- détails
objet
- documentId
chaîne
Chrome 106 et versions ultérieuresUUID du document chargé.
- documentLifecycleChrome 106 et versions ultérieures
Cycle de vie du document.
- frameId
Total
La valeur 0 indique que la navigation a lieu dans la fenêtre de contenu de l'onglet, tandis qu'une valeur positive indique une navigation dans un sous-frame. Les ID de frame sont uniques dans un onglet.
- frameTypeChrome 106 et versions ultérieures
Type de frame dans lequel la navigation a eu lieu.
- parentDocumentId
chaîne facultative
Chrome 106 et versions ultérieuresUUID du document parent propriétaire de ce frame. Cette valeur n'est pas définie s'il n'y a pas de parent.
- parentFrameId
Total
Chrome 74 et versions ultérieuresID du frame parent ou
-1
s'il s'agit du frame principal. - processId
Total
ID du processus qui exécute le moteur de rendu pour ce frame.
- tabId
Total
ID de l'onglet dans lequel la navigation a lieu.
- timeStamp
Total
Heure à laquelle le DOM de la page a été entièrement construit, en millisecondes depuis l'epoch.
- url
chaîne
-
-
- filtres
object facultatif
- url
Conditions que l'URL vers laquelle l'utilisateur est redirigé doit remplir. Les champs "schemes" et "ports" de UrlFilter sont ignorés pour cet événement.
-
onErrorOccurred
chrome.webNavigation.onErrorOccurred.addListener(
callback: function,
filters?: object,
)
Déclenché lorsqu'une erreur se produit et que la navigation est abandonnée. Cela peut se produire en cas d'erreur réseau ou si l'utilisateur a interrompu la navigation.
Paramètres
- callback
fonction
Le paramètre
callback
se présente comme suit :(details: object) => void
- détails
objet
- documentId
chaîne
Chrome 106 et versions ultérieuresUUID du document chargé.
- documentLifecycleChrome 106 et versions ultérieures
Cycle de vie du document.
- erreur
chaîne
Description de l'erreur.
- frameId
Total
La valeur 0 indique que la navigation a lieu dans la fenêtre de contenu de l'onglet, tandis qu'une valeur positive indique une navigation dans un sous-frame. Les ID de frame sont uniques dans un onglet.
- frameTypeChrome 106 et versions ultérieures
Type de frame dans lequel la navigation a eu lieu.
- parentDocumentId
chaîne facultative
Chrome 106 et versions ultérieuresUUID du document parent propriétaire de ce frame. Cette valeur n'est pas définie s'il n'y a pas de parent.
- parentFrameId
Total
Chrome 74 et versions ultérieuresID du frame parent ou
-1
s'il s'agit du frame principal. - processId
Total
Obsolète depuis Chrome 50Le processId n'est plus défini pour cet événement.
Valeur -1.
- tabId
Total
ID de l'onglet dans lequel la navigation a lieu.
- timeStamp
Total
Heure à laquelle l'erreur s'est produite, en millisecondes depuis l'epoch.
- url
chaîne
-
-
- filtres
object facultatif
- url
Conditions que l'URL vers laquelle l'utilisateur est redirigé doit remplir. Les champs "schemes" et "ports" de UrlFilter sont ignorés pour cet événement.
-
onHistoryStateUpdated
chrome.webNavigation.onHistoryStateUpdated.addListener(
callback: function,
filters?: object,
)
Déclenché lorsque l'historique du frame a été mis à jour vers une nouvelle URL. Tous les futurs événements de ce frame utiliseront l'URL mise à jour.
Paramètres
- callback
fonction
Le paramètre
callback
se présente comme suit :(details: object) => void
- détails
objet
- documentId
chaîne
Chrome 106 et versions ultérieuresUUID du document chargé.
- documentLifecycleChrome 106 et versions ultérieures
Cycle de vie du document.
- frameId
Total
La valeur 0 indique que la navigation a lieu dans la fenêtre de contenu de l'onglet, tandis qu'une valeur positive indique une navigation dans un sous-frame. Les ID de frame sont uniques dans un onglet.
- frameTypeChrome 106 et versions ultérieures
Type de frame dans lequel la navigation a eu lieu.
- parentDocumentId
chaîne facultative
Chrome 106 et versions ultérieuresUUID du document parent propriétaire de ce frame. Cette valeur n'est pas définie s'il n'y a pas de parent.
- parentFrameId
Total
Chrome 74 et versions ultérieuresID du frame parent ou
-1
s'il s'agit du frame principal. - processId
Total
ID du processus qui exécute le moteur de rendu pour ce frame.
- tabId
Total
ID de l'onglet dans lequel la navigation a lieu.
- timeStamp
Total
Heure à laquelle la navigation a été validée, en millisecondes depuis l'epoch.
- transitionQualifiers
Liste des qualificatifs de transition.
- transitionType
Cause de la navigation.
- url
chaîne
-
-
- filtres
object facultatif
- url
Conditions que l'URL vers laquelle l'utilisateur est redirigé doit remplir. Les champs "schemes" et "ports" de UrlFilter sont ignorés pour cet événement.
-
onReferenceFragmentUpdated
chrome.webNavigation.onReferenceFragmentUpdated.addListener(
callback: function,
filters?: object,
)
Déclenché lorsque le fragment de référence d'un frame a été mis à jour. Tous les futurs événements de ce frame utiliseront l'URL mise à jour.
Paramètres
- callback
fonction
Le paramètre
callback
se présente comme suit :(details: object) => void
- détails
objet
- documentId
chaîne
Chrome 106 et versions ultérieuresUUID du document chargé.
- documentLifecycleChrome 106 et versions ultérieures
Cycle de vie du document.
- frameId
Total
La valeur 0 indique que la navigation a lieu dans la fenêtre de contenu de l'onglet, tandis qu'une valeur positive indique une navigation dans un sous-frame. Les ID de frame sont uniques dans un onglet.
- frameTypeChrome 106 et versions ultérieures
Type de frame dans lequel la navigation a eu lieu.
- parentDocumentId
chaîne facultative
Chrome 106 et versions ultérieuresUUID du document parent propriétaire de ce frame. Cette valeur n'est pas définie s'il n'y a pas de parent.
- parentFrameId
Total
Chrome 74 et versions ultérieuresID du frame parent ou
-1
s'il s'agit du frame principal. - processId
Total
ID du processus qui exécute le moteur de rendu pour ce frame.
- tabId
Total
ID de l'onglet dans lequel la navigation a lieu.
- timeStamp
Total
Heure à laquelle la navigation a été validée, en millisecondes depuis l'epoch.
- transitionQualifiers
Liste des qualificatifs de transition.
- transitionType
Cause de la navigation.
- url
chaîne
-
-
- filtres
object facultatif
- url
Conditions que l'URL vers laquelle l'utilisateur est redirigé doit remplir. Les champs "schemes" et "ports" de UrlFilter sont ignorés pour cet événement.
-
onTabReplaced
chrome.webNavigation.onTabReplaced.addListener(
callback: function,
)
Déclenché lorsque le contenu de l'onglet est remplacé par un autre onglet (généralement prérendu).
Paramètres
- callback
fonction
Le paramètre
callback
se présente comme suit :(details: object) => void
- détails
objet
- replacedTabId
Total
ID de l'onglet remplacé.
- tabId
Total
ID de l'onglet qui a remplacé l'ancien.
- timeStamp
Total
Heure à laquelle le remplacement a eu lieu, en millisecondes depuis l'epoch.
-
-