Beschrijving
Gebruik de chrome.webNavigation API om meldingen te ontvangen over de status van lopende navigatieverzoeken.
Toestemmingen
webNavigation Voor alle browser.webNavigation methoden en -gebeurtenissen is het vereist dat u de "webNavigation" -machtiging in het extensiemanifest declareert. Bijvoorbeeld:
{
"name": "My extension",
...
"permissions": [
"webNavigation"
],
...
}
Concepten en gebruik
Volgorde van gebeurtenissen
Bij een succesvol voltooide navigatie worden de volgende gebeurtenissen in de aangegeven volgorde geactiveerd:
onBeforeNavigate -> onCommitted -> [onDOMContentLoaded] -> onCompleted
Elke fout die tijdens het proces optreedt, resulteert in een onErrorOccurred -gebeurtenis. Voor een specifieke navigatie worden er na onErrorOccurred geen verdere gebeurtenissen meer geactiveerd.
Als een navigerend frame subframes bevat, wordt onCommitted ervan geactiveerd vóór onBeforeNavigate van elk van de onderliggende frames; terwijl onCompleted wordt geactiveerd ná onCompleted van alle onderliggende frames.
Als het referentiefragment van een frame wordt gewijzigd, wordt een onReferenceFragmentUpdated -gebeurtenis geactiveerd. Deze gebeurtenis kan op elk moment na onDOMContentLoaded worden geactiveerd, zelfs na onCompleted .
Als de geschiedenis-API wordt gebruikt om de status van een frame te wijzigen (bijvoorbeeld met history.pushState() , wordt een onHistoryStateUpdated -gebeurtenis geactiveerd. Deze gebeurtenis kan op elk moment na onDOMContentLoaded worden geactiveerd.
Als een pagina via de navigatie vanuit de back-forward cache wordt geladen, wordt de onDOMContentLoaded -gebeurtenis niet geactiveerd. Deze gebeurtenis wordt niet geactiveerd omdat de inhoud al volledig geladen was toen de pagina voor het eerst werd bezocht.
Als een navigatie is geactiveerd via Chrome Instant of Instant Pages , wordt een volledig geladen pagina in het huidige tabblad geplaatst. In dat geval wordt een onTabReplaced gebeurtenis geactiveerd.
Relatie tot webRequest-gebeurtenissen
Er is geen vaste volgorde tussen gebeurtenissen van de webRequest API en gebeurtenissen van de webNavigation API. Het is mogelijk dat webRequest-gebeurtenissen nog steeds worden ontvangen voor frames die al een nieuwe navigatie zijn gestart, of dat een navigatie pas verdergaat nadat de netwerkbronnen volledig zijn geladen.
Over het algemeen zijn de webNavigation-gebeurtenissen nauw verbonden met de navigatiestatus die in de gebruikersinterface wordt weergegeven, terwijl de webRequest-gebeurtenissen overeenkomen met de status van de netwerkstack, die doorgaans niet zichtbaar is voor de gebruiker.
Tab-ID's
Niet alle navigatietabs komen overeen met daadwerkelijke tabs in de Chrome-gebruikersinterface, bijvoorbeeld een tab die vooraf wordt weergegeven. Dergelijke tabs zijn niet toegankelijk via de tabs-API en u kunt er ook geen informatie over opvragen door webNavigation.getFrame() of webNavigation.getAllFrames() aan te roepen. Zodra een dergelijke tab wordt ingevoegd, wordt een onTabReplaced gebeurtenis geactiveerd en worden ze toegankelijk via deze API's.
Tijdstempels
It's important to note that some technical oddities in the OS's handling of distinct Chrome processes can cause the clock to be skewed between the browser itself and extension processes. That means that the timeStamp property of the WebNavigation event timeStamp property is only guaranteed to be internally consistent. Comparing one event to another event will give you the correct offset between them, but comparing them to the current time inside the extension (using (new Date()).getTime() , for instance) might give unexpected results.
Frame-ID's
Frames binnen een tabblad kunnen worden geïdentificeerd aan de hand van een frame-ID. De frame-ID van het hoofdframe is altijd 0, de ID van subframes is een positief getal. Zodra een document in een frame is opgebouwd, blijft de frame-ID constant gedurende de levensduur van het document. Vanaf Chrome 49 blijft deze ID ook constant gedurende de levensduur van het frame (ook bij meerdere navigaties).
Due to the multi-process nature of Chrome, a tab might use different processes to render the source and destination of a web page. Therefore, if a navigation takes place in a new process, you might receive events both from the new and the old page until the new navigation is committed (ie the onCommitted event is sent for the new main frame). In other words, it is possible to have more than one pending sequence of webNavigation events with the same frameId . The sequences can be distinguished by the processId key.
Houd er ook rekening mee dat het proces tijdens een voorlopige laadprocedure meerdere keren kan worden gewijzigd. Dit gebeurt wanneer de laadprocedure wordt omgeleid naar een andere site. In dat geval ontvangt u herhaaldelijk onBeforeNavigate en onErrorOccurred -gebeurtenissen, totdat u de uiteindelijke onCommitted gebeurtenis ontvangt.
Another concept that is problematic with extensions is the lifecycle of the frame. A frame hosts a document (which is associated with a committed URL). The document can change (say by navigating) but the frameId won't, and so it is difficult to associate that something happened in a specific document with just frameIds . We are introducing a concept of a documentId which is a unique identifier per document. If a frame is navigated and opens a new document the identifier will change. This field is useful for determining when pages change their lifecycle state (between prerender/active/cached) because it remains the same.
Overgangstypen en -kwalificaties
De onCommitted gebeurtenis webNavigation heeft een ` transitionType en een ` transitionQualifiers eigenschap. Het overgangstype is hetzelfde als dat in de `history` API wordt gebruikt om te beschrijven hoe de browser naar deze specifieke URL is genavigeerd. Daarnaast kunnen er verschillende overgangskwalificaties worden geretourneerd die de navigatie verder definiëren.
De volgende overgangsvoorwaarden zijn van toepassing:
| Overgangskwalificatie | Beschrijving |
|---|---|
| "client_redirect" | Tijdens de navigatie hebben zich een of meer omleidingen voorgedaan als gevolg van JavaScript of meta refresh-tags op de pagina. |
| "server_redirect" | Tijdens de navigatie hebben zich een of meer omleidingen voorgedaan als gevolg van HTTP-headers die door de server zijn verzonden. |
| "vooruit_achteruit" | De gebruiker heeft de knop 'Vooruit' of 'Terug' gebruikt om de navigatie te starten. |
| "van_adresbalk" | De gebruiker startte de navigatie vanuit de adresbalk (ook wel Omnibox genoemd). |
Voorbeelden
Om deze API uit te proberen, installeer je het webNavigation API-voorbeeld uit de chrome-extension-samples- repository.
Soorten
TransitionQualifier
Enum
"client_redirect" "server_redirect" "vooruit_achteruit" "van_adresbalk"
TransitionType
Oorzaak van de navigatie. Dezelfde overgangstypen als gedefinieerd in de history API worden gebruikt. Dit zijn dezelfde overgangstypen als gedefinieerd in de history API , behalve dat "start_page" in plaats van "auto_toplevel" wordt gebruikt (voor achterwaartse compatibiliteit).
Enum
"link" "getypt" "auto_bookmark" "auto_subframe" "manual_subframe" "gegenereerd" "start_page" "formulier_verzenden" "herladen" "trefwoord" "trefwoord_gegenereerd"
Methoden
getAllFrames()
chrome.webNavigation.getAllFrames(
details: object,
): Promise<object[] | undefined>
Haalt informatie op over alle frames van een bepaald tabblad.
Parameters
- details
voorwerp
Informatie over het tabblad waar alle frames vandaan gehaald kunnen worden.
- tabId
nummer
De ID van het tabblad.
Retourneert
Promise<object[] | undefined>
Chrome 93+
getFrame()
chrome.webNavigation.getFrame(
details: object,
): Promise<object | undefined>
Haalt informatie op over het betreffende frame. Een frame verwijst naar een <iframe> of een <frame> van een webpagina en wordt geïdentificeerd door een tab-ID en een frame-ID.
Parameters
- details
voorwerp
Informatie over het frame waarover gegevens moeten worden opgehaald.
- documentId
string optioneel
Chrome 106+De UUID van het document. Indien de frameId en/of tabId worden opgegeven, worden deze gecontroleerd om te zien of ze overeenkomen met het document dat is gevonden op basis van de opgegeven document-ID.
- frameId
nummer optioneel
De ID van het frame in het betreffende tabblad.
- proces-ID
nummer optioneel
Niet meer bruikbaar sinds Chrome 49.Frames worden nu uniek geïdentificeerd door hun tab-ID en frame-ID; de proces-ID is niet langer nodig en wordt daarom genegeerd.
De ID van het proces dat de renderer voor dit tabblad uitvoert.
- tabId
nummer optioneel
De ID van het tabblad waarin het frame zich bevindt.
Retourneert
Promise<object | undefined>
Chrome 93+
Evenementen
onBeforeNavigate
chrome.webNavigation.onBeforeNavigate.addListener(
callback: function,
filters?: object,
)
Wordt geactiveerd wanneer er een navigatie op het punt staat plaats te vinden.
Parameters
functie
De
callbackparameter ziet er als volgt uit:(details: object) => void
voorwerp
- Chrome 106+
De levenscyclus waarin het document zich bevindt.
nummer
0 geeft aan dat de navigatie plaatsvindt in het venster met de tabinhoud; een positieve waarde geeft aan dat de navigatie plaatsvindt in een subframe. Frame-ID's zijn uniek voor een bepaalde tab en een bepaald proces.
- Chrome 106+
Het type frame waarin de navigatie plaatsvond.
string optioneel
Chrome 106+De UUID van het bovenliggende document waartoe dit frame behoort. Deze wordt niet ingesteld als er geen bovenliggend document is.
nummer
De ID van het bovenliggende frame, of
-1als dit het hoofdframe is.nummer
Niet meer beschikbaar sinds Chrome 50.De processId wordt niet langer ingesteld voor deze gebeurtenis, omdat het proces dat het resulterende document zal genereren pas bekend is bij onCommit.
De waarde van -1.
nummer
De ID van het tabblad waarin de navigatie zal plaatsvinden.
nummer
Het tijdstip waarop de browser op het punt stond de navigatie te starten, in milliseconden sinds de epoch.
snaar
object optioneel
Voorwaarden waaraan de URL waarnaar wordt genavigeerd moet voldoen. De velden 'schemes' en 'ports' van UrlFilter worden voor deze gebeurtenis genegeerd.
onCommitted
chrome.webNavigation.onCommitted.addListener(
callback: function,
filters?: object,
)
Deze gebeurtenis wordt geactiveerd wanneer een navigatie is voltooid. Het document (en de bronnen waarnaar het verwijst, zoals afbeeldingen en subframes) worden mogelijk nog gedownload, maar ten minste een deel van het document is al van de server ontvangen en de browser heeft besloten over te schakelen naar het nieuwe document.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:(details: object) => void
- details
voorwerp
- documentId
snaar
Chrome 106+De UUID van het geladen document.
- documentLevenscyclusChrome 106+
De levenscyclus waarin het document zich bevindt.
- frameId
nummer
0 geeft aan dat de navigatie plaatsvindt in het venster met de tabinhoud; een positieve waarde geeft aan dat de navigatie plaatsvindt in een subvenster. De venster-ID's zijn uniek binnen een tabblad.
- frameTypeChrome 106+
Het type frame waarin de navigatie plaatsvond.
- parentDocumentId
string optioneel
Chrome 106+De UUID van het bovenliggende document waartoe dit frame behoort. Deze wordt niet ingesteld als er geen bovenliggend document is.
- parentFrameId
nummer
Chrome 74+De ID van het bovenliggende frame, of
-1als dit het hoofdframe is. - proces-ID
nummer
De ID van het proces dat de renderer voor dit frame uitvoert.
- tabId
nummer
De ID van het tabblad waarin de navigatie plaatsvindt.
- tijdstempel
nummer
Het tijdstip waarop de navigatie werd voltooid, in milliseconden sinds het beginpunt.
- overgangskwalificaties
Een lijst met overgangscriteria.
- overgangstype
Oorzaak van de navigatie.
- URL
snaar
- filters
object optioneel
- URL
Voorwaarden waaraan de URL waarnaar wordt genavigeerd moet voldoen. De velden 'schemes' en 'ports' van UrlFilter worden voor deze gebeurtenis genegeerd.
onCompleted
chrome.webNavigation.onCompleted.addListener(
callback: function,
filters?: object,
)
Wordt geactiveerd wanneer een document, inclusief de bronnen waarnaar het verwijst, volledig is geladen en geïnitialiseerd.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:(details: object) => void
- details
voorwerp
- documentId
snaar
Chrome 106+De UUID van het geladen document.
- documentLevenscyclusChrome 106+
De levenscyclus waarin het document zich bevindt.
- frameId
nummer
0 geeft aan dat de navigatie plaatsvindt in het venster met de tabinhoud; een positieve waarde geeft aan dat de navigatie plaatsvindt in een subvenster. De venster-ID's zijn uniek binnen een tabblad.
- frameTypeChrome 106+
Het type frame waarin de navigatie plaatsvond.
- parentDocumentId
string optioneel
Chrome 106+De UUID van het bovenliggende document waartoe dit frame behoort. Deze wordt niet ingesteld als er geen bovenliggend document is.
- parentFrameId
nummer
Chrome 74+De ID van het bovenliggende frame, of
-1als dit het hoofdframe is. - proces-ID
nummer
De ID van het proces dat de renderer voor dit frame uitvoert.
- tabId
nummer
De ID van het tabblad waarin de navigatie plaatsvindt.
- tijdstempel
nummer
Het tijdstip waarop het document volledig geladen was, in milliseconden sinds de epoch.
- URL
snaar
- filters
object optioneel
- URL
Voorwaarden waaraan de URL waarnaar wordt genavigeerd moet voldoen. De velden 'schemes' en 'ports' van UrlFilter worden voor deze gebeurtenis genegeerd.
onCreatedNavigationTarget
chrome.webNavigation.onCreatedNavigationTarget.addListener(
callback: function,
filters?: object,
)
Deze gebeurtenis wordt geactiveerd wanneer een nieuw venster, of een nieuw tabblad in een bestaand venster, wordt aangemaakt om een navigatie-element te hosten.
Parameters
functie
De
callbackparameter ziet er als volgt uit:(details: object) => void
voorwerp
nummer
De ID van het frame met sourceTabId waarin de navigatie wordt geactiveerd. 0 geeft het hoofdframe aan.
nummer
De ID van het proces dat de renderer voor het bronframe uitvoert.
nummer
De ID van het tabblad waarin de navigatie wordt geactiveerd.
nummer
De ID van het tabblad waarin de URL is geopend.
nummer
Het tijdstip waarop de browser op het punt stond een nieuwe weergave te creëren, in milliseconden sinds de epoch.
snaar
De URL moet in een nieuw venster worden geopend.
object optioneel
Voorwaarden waaraan de URL waarnaar wordt genavigeerd moet voldoen. De velden 'schemes' en 'ports' van UrlFilter worden voor deze gebeurtenis genegeerd.
onDOMContentLoaded
chrome.webNavigation.onDOMContentLoaded.addListener(
callback: function,
filters?: object,
)
Deze gebeurtenis wordt geactiveerd wanneer de DOM van de pagina volledig is opgebouwd, maar de bronnen waarnaar wordt verwezen mogelijk nog niet volledig zijn geladen.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:(details: object) => void
- details
voorwerp
- documentId
snaar
Chrome 106+De UUID van het geladen document.
- documentLevenscyclusChrome 106+
De levenscyclus waarin het document zich bevindt.
- frameId
nummer
0 geeft aan dat de navigatie plaatsvindt in het venster met de tabinhoud; een positieve waarde geeft aan dat de navigatie plaatsvindt in een subvenster. De venster-ID's zijn uniek binnen een tabblad.
- frameTypeChrome 106+
Het type frame waarin de navigatie plaatsvond.
- parentDocumentId
string optioneel
Chrome 106+De UUID van het bovenliggende document waartoe dit frame behoort. Deze wordt niet ingesteld als er geen bovenliggend document is.
- parentFrameId
nummer
Chrome 74+De ID van het bovenliggende frame, of
-1als dit het hoofdframe is. - proces-ID
nummer
De ID van het proces dat de renderer voor dit frame uitvoert.
- tabId
nummer
De ID van het tabblad waarin de navigatie plaatsvindt.
- tijdstempel
nummer
Het tijdstip waarop de DOM van de pagina volledig is opgebouwd, in milliseconden sinds de epoch.
- URL
snaar
- filters
object optioneel
- URL
Voorwaarden waaraan de URL waarnaar wordt genavigeerd moet voldoen. De velden 'schemes' en 'ports' van UrlFilter worden voor deze gebeurtenis genegeerd.
onErrorOccurred
chrome.webNavigation.onErrorOccurred.addListener(
callback: function,
filters?: object,
)
Deze gebeurtenis wordt geactiveerd wanneer er een fout optreedt en de navigatie wordt afgebroken. Dit kan gebeuren als er een netwerkfout is opgetreden of als de gebruiker de navigatie heeft afgebroken.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:(details: object) => void
- details
voorwerp
- documentId
snaar
Chrome 106+De UUID van het geladen document.
- documentLevenscyclusChrome 106+
De levenscyclus waarin het document zich bevindt.
- fout
snaar
De foutbeschrijving.
- frameId
nummer
0 geeft aan dat de navigatie plaatsvindt in het venster met de tabinhoud; een positieve waarde geeft aan dat de navigatie plaatsvindt in een subvenster. De venster-ID's zijn uniek binnen een tabblad.
- frameTypeChrome 106+
Het type frame waarin de navigatie plaatsvond.
- parentDocumentId
string optioneel
Chrome 106+De UUID van het bovenliggende document waartoe dit frame behoort. Deze wordt niet ingesteld als er geen bovenliggend document is.
- parentFrameId
nummer
Chrome 74+De ID van het bovenliggende frame, of
-1als dit het hoofdframe is. - proces-ID
nummer
Niet meer beschikbaar sinds Chrome 50.De processId is niet langer ingesteld voor deze gebeurtenis.
De waarde van -1.
- tabId
nummer
De ID van het tabblad waarin de navigatie plaatsvindt.
- tijdstempel
nummer
Het tijdstip waarop de fout optrad, in milliseconden sinds het begin van het tijdsbestek.
- URL
snaar
- filters
object optioneel
- URL
Voorwaarden waaraan de URL waarnaar wordt genavigeerd moet voldoen. De velden 'schemes' en 'ports' van UrlFilter worden voor deze gebeurtenis genegeerd.
onHistoryStateUpdated
chrome.webNavigation.onHistoryStateUpdated.addListener(
callback: function,
filters?: object,
)
Deze gebeurtenis wordt geactiveerd wanneer de geschiedenis van het frame wordt bijgewerkt naar een nieuwe URL. Alle toekomstige gebeurtenissen voor dat frame zullen de bijgewerkte URL gebruiken.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:(details: object) => void
- details
voorwerp
- documentId
snaar
Chrome 106+De UUID van het geladen document.
- documentLevenscyclusChrome 106+
De levenscyclus waarin het document zich bevindt.
- frameId
nummer
0 geeft aan dat de navigatie plaatsvindt in het venster met de tabinhoud; een positieve waarde geeft aan dat de navigatie plaatsvindt in een subvenster. De venster-ID's zijn uniek binnen een tabblad.
- frameTypeChrome 106+
Het type frame waarin de navigatie plaatsvond.
- parentDocumentId
string optioneel
Chrome 106+De UUID van het bovenliggende document waartoe dit frame behoort. Deze wordt niet ingesteld als er geen bovenliggend document is.
- parentFrameId
nummer
Chrome 74+De ID van het bovenliggende frame, of
-1als dit het hoofdframe is. - proces-ID
nummer
De ID van het proces dat de renderer voor dit frame uitvoert.
- tabId
nummer
De ID van het tabblad waarin de navigatie plaatsvindt.
- tijdstempel
nummer
Het tijdstip waarop de navigatie werd voltooid, in milliseconden sinds het beginpunt.
- overgangskwalificaties
Een lijst met overgangscriteria.
- overgangstype
Oorzaak van de navigatie.
- URL
snaar
- filters
object optioneel
- URL
Voorwaarden waaraan de URL waarnaar wordt genavigeerd moet voldoen. De velden 'schemes' en 'ports' van UrlFilter worden voor deze gebeurtenis genegeerd.
onReferenceFragmentUpdated
chrome.webNavigation.onReferenceFragmentUpdated.addListener(
callback: function,
filters?: object,
)
Wordt geactiveerd wanneer het referentiefragment van een frame wordt bijgewerkt. Alle toekomstige gebeurtenissen voor dat frame zullen de bijgewerkte URL gebruiken.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:(details: object) => void
- details
voorwerp
- documentId
snaar
Chrome 106+De UUID van het geladen document.
- documentLevenscyclusChrome 106+
De levenscyclus waarin het document zich bevindt.
- frameId
nummer
0 geeft aan dat de navigatie plaatsvindt in het venster met de tabinhoud; een positieve waarde geeft aan dat de navigatie plaatsvindt in een subvenster. De venster-ID's zijn uniek binnen een tabblad.
- frameTypeChrome 106+
Het type frame waarin de navigatie plaatsvond.
- parentDocumentId
string optioneel
Chrome 106+De UUID van het bovenliggende document waartoe dit frame behoort. Deze wordt niet ingesteld als er geen bovenliggend document is.
- parentFrameId
nummer
Chrome 74+De ID van het bovenliggende frame, of
-1als dit het hoofdframe is. - proces-ID
nummer
De ID van het proces dat de renderer voor dit frame uitvoert.
- tabId
nummer
De ID van het tabblad waarin de navigatie plaatsvindt.
- tijdstempel
nummer
Het tijdstip waarop de navigatie werd voltooid, in milliseconden sinds het beginpunt.
- overgangskwalificaties
Een lijst met overgangscriteria.
- overgangstype
Oorzaak van de navigatie.
- URL
snaar
- filters
object optioneel
- URL
Voorwaarden waaraan de URL waarnaar wordt genavigeerd moet voldoen. De velden 'schemes' en 'ports' van UrlFilter worden voor deze gebeurtenis genegeerd.
onTabReplaced
chrome.webNavigation.onTabReplaced.addListener(
callback: function,
)
Deze gebeurtenis wordt geactiveerd wanneer de inhoud van het tabblad wordt vervangen door een ander (meestal eerder weergegeven) tabblad.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:(details: object) => void
- details
voorwerp
- vervangenTabId
nummer
De ID van het tabblad dat is vervangen.
- tabId
nummer
De ID van het tabblad dat het oude tabblad heeft vervangen.
- tijdstempel
nummer
Het tijdstip waarop de vervanging plaatsvond, in milliseconden sinds het begin van het tijdperk.