Description
Utilisez l'API chrome.webNavigation pour recevoir des notifications sur l'état des requêtes de navigation en cours.
Autorisations
webNavigationToutes 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étailsobjet Informations sur l'onglet à partir duquel récupérer toutes les frames. - 
    tabIdTotal 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étailsobjet Informations sur le frame pour lequel récupérer des informations. - 
    documentIdchaî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. 
- 
    frameIdnumber facultatif ID du frame dans l'onglet donné. 
- 
    processIdnumber 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. 
- 
    tabIdnumber 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 callbackse présente comme suit :(details: object) => void - 
    objet - 
    Chrome 106 et versions ultérieuresCycle 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érieuresType 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 -1s'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
- 
    callbackfonction Le paramètre callbackse présente comme suit :(details: object) => void - 
    détailsobjet - 
    documentIdchaîne Chrome 106 et versions ultérieuresUUID du document chargé. 
- 
    documentLifecycleChrome 106 et versions ultérieuresCycle de vie du document. 
- 
    frameIdTotal 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érieuresType de frame dans lequel la navigation a eu lieu. 
- 
    parentDocumentIdchaî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. 
- 
    parentFrameIdTotal Chrome 74 et versions ultérieuresID du frame parent ou -1s'il s'agit du frame principal.
- 
    processIdTotal ID du processus qui exécute le moteur de rendu pour ce frame. 
- 
    tabIdTotal ID de l'onglet dans lequel la navigation a lieu. 
- 
    timeStampTotal Heure à laquelle la navigation a été validée, en millisecondes depuis l'epoch. 
- 
    transitionQualifiersListe des qualificatifs de transition. 
- 
    transitionTypeCause de la navigation. 
- 
    urlchaîne 
 
- 
    
 
- 
    
- 
    filtresobject facultatif - 
    urlConditions 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
- 
    callbackfonction Le paramètre callbackse présente comme suit :(details: object) => void - 
    détailsobjet - 
    documentIdchaîne Chrome 106 et versions ultérieuresUUID du document chargé. 
- 
    documentLifecycleChrome 106 et versions ultérieuresCycle de vie du document. 
- 
    frameIdTotal 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érieuresType de frame dans lequel la navigation a eu lieu. 
- 
    parentDocumentIdchaî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. 
- 
    parentFrameIdTotal Chrome 74 et versions ultérieuresID du frame parent ou -1s'il s'agit du frame principal.
- 
    processIdTotal ID du processus qui exécute le moteur de rendu pour ce frame. 
- 
    tabIdTotal ID de l'onglet dans lequel la navigation a lieu. 
- 
    timeStampTotal Heure à laquelle le document a fini de se charger, en millisecondes depuis l'epoch. 
- 
    urlchaîne 
 
- 
    
 
- 
    
- 
    filtresobject facultatif - 
    urlConditions 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 callbackse 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
- 
    callbackfonction Le paramètre callbackse présente comme suit :(details: object) => void - 
    détailsobjet - 
    documentIdchaîne Chrome 106 et versions ultérieuresUUID du document chargé. 
- 
    documentLifecycleChrome 106 et versions ultérieuresCycle de vie du document. 
- 
    frameIdTotal 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érieuresType de frame dans lequel la navigation a eu lieu. 
- 
    parentDocumentIdchaî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. 
- 
    parentFrameIdTotal Chrome 74 et versions ultérieuresID du frame parent ou -1s'il s'agit du frame principal.
- 
    processIdTotal ID du processus qui exécute le moteur de rendu pour ce frame. 
- 
    tabIdTotal ID de l'onglet dans lequel la navigation a lieu. 
- 
    timeStampTotal Heure à laquelle le DOM de la page a été entièrement construit, en millisecondes depuis l'epoch. 
- 
    urlchaîne 
 
- 
    
 
- 
    
- 
    filtresobject facultatif - 
    urlConditions 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
- 
    callbackfonction Le paramètre callbackse présente comme suit :(details: object) => void - 
    détailsobjet - 
    documentIdchaîne Chrome 106 et versions ultérieuresUUID du document chargé. 
- 
    documentLifecycleChrome 106 et versions ultérieuresCycle de vie du document. 
- 
    erreurchaîne Description de l'erreur. 
- 
    frameIdTotal 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érieuresType de frame dans lequel la navigation a eu lieu. 
- 
    parentDocumentIdchaî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. 
- 
    parentFrameIdTotal Chrome 74 et versions ultérieuresID du frame parent ou -1s'il s'agit du frame principal.
- 
    processIdTotal Obsolète depuis Chrome 50Le processId n'est plus défini pour cet événement. Valeur -1. 
- 
    tabIdTotal ID de l'onglet dans lequel la navigation a lieu. 
- 
    timeStampTotal Heure à laquelle l'erreur s'est produite, en millisecondes depuis l'epoch. 
- 
    urlchaîne 
 
- 
    
 
- 
    
- 
    filtresobject facultatif - 
    urlConditions 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
- 
    callbackfonction Le paramètre callbackse présente comme suit :(details: object) => void - 
    détailsobjet - 
    documentIdchaîne Chrome 106 et versions ultérieuresUUID du document chargé. 
- 
    documentLifecycleChrome 106 et versions ultérieuresCycle de vie du document. 
- 
    frameIdTotal 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érieuresType de frame dans lequel la navigation a eu lieu. 
- 
    parentDocumentIdchaî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. 
- 
    parentFrameIdTotal Chrome 74 et versions ultérieuresID du frame parent ou -1s'il s'agit du frame principal.
- 
    processIdTotal ID du processus qui exécute le moteur de rendu pour ce frame. 
- 
    tabIdTotal ID de l'onglet dans lequel la navigation a lieu. 
- 
    timeStampTotal Heure à laquelle la navigation a été validée, en millisecondes depuis l'epoch. 
- 
    transitionQualifiersListe des qualificatifs de transition. 
- 
    transitionTypeCause de la navigation. 
- 
    urlchaîne 
 
- 
    
 
- 
    
- 
    filtresobject facultatif - 
    urlConditions 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
- 
    callbackfonction Le paramètre callbackse présente comme suit :(details: object) => void - 
    détailsobjet - 
    documentIdchaîne Chrome 106 et versions ultérieuresUUID du document chargé. 
- 
    documentLifecycleChrome 106 et versions ultérieuresCycle de vie du document. 
- 
    frameIdTotal 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érieuresType de frame dans lequel la navigation a eu lieu. 
- 
    parentDocumentIdchaî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. 
- 
    parentFrameIdTotal Chrome 74 et versions ultérieuresID du frame parent ou -1s'il s'agit du frame principal.
- 
    processIdTotal ID du processus qui exécute le moteur de rendu pour ce frame. 
- 
    tabIdTotal ID de l'onglet dans lequel la navigation a lieu. 
- 
    timeStampTotal Heure à laquelle la navigation a été validée, en millisecondes depuis l'epoch. 
- 
    transitionQualifiersListe des qualificatifs de transition. 
- 
    transitionTypeCause de la navigation. 
- 
    urlchaîne 
 
- 
    
 
- 
    
- 
    filtresobject facultatif - 
    urlConditions 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
- 
    callbackfonction Le paramètre callbackse présente comme suit :(details: object) => void - 
    détailsobjet - 
    replacedTabIdTotal ID de l'onglet remplacé. 
- 
    tabIdTotal ID de l'onglet qui a remplacé l'ancien. 
- 
    timeStampTotal Heure à laquelle le remplacement a eu lieu, en millisecondes depuis l'epoch. 
 
- 
    
 
-