HTML Academy · Les

pushState en replaceState

Werk de browser-URL bij zonder de volledige pagina opnieuw te laden

Les 1 van 414 stappen

pushState en replaceState is een gratis HTML Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject HTML Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus HTML Academy bevat in totaal 4 lessen.

De History API

Met de History API kan een pagina de URL in de adresbalk wijzigen zonder een volledige navigatie te starten. In combinatie met rendering aan de clientzijde vormt dit de basis voor toepassingen met één pagina die aanvoelen als native toepassingen, zonder in te leveren op URL's die je als bladwijzer kunt opslaan.

pushState

history.pushState(state, "", url) voegt een nieuwe vermelding toe aan de browsergeschiedenis. De URL in de adresbalk wordt meteen bijgewerkt; er wordt geen netwerkaanvraag gedaan. De gebruiker kan met de terugknop van de browser teruggaan naar de vorige vermelding.

history.pushState({ view: "settings" }, "", "/settings");

Het argument state

Het eerste argument bestaat uit willekeurige serialiseerbare gegevens die aan de vermelding zijn gekoppeld. Lees deze later terug via history.state of in popstate-events. Gebruik dit om gebruikersinterface-status door te geven (welk tabblad geopend was, de scrollpositie), zodat terugnavigeren exact dezelfde weergave kan herstellen.

Het argument title

Het tweede argument is de titel van het geschiedenisitem. In de praktijk negeren alle moderne browsers dit — stel document.title = "..." rechtstreeks in om de titel te wijzigen. Geef uit conventie een lege tekenreeks door; dit heeft geen effect.

Het argument url

Het derde argument is de nieuwe URL. Relatieve URL's worden opgelost ten opzichte van de huidige pagina; de nieuwe URL moet dezelfde oorsprong hebben (een andere oorsprong veroorzaakt een SecurityError). Browsers halen de URL niet op — pushState werkt alleen de adresbalk en de geschiedenis bij.

replaceState

history.replaceState(state, "", url) vervangt het huidige geschiedenisitem in plaats van een nieuw item toe te voegen. Gebruik dit wanneer je de URL wilt bijwerken zonder een nieuwe stap voor achteruitnavigatie te maken, bijvoorbeeld bij het bijwerken van een filterqueryreeks.

// Update query string in place
const url = new URL(location);
url.searchParams.set("filter", "open");
history.replaceState(null, "", url);

Gebruikssituaties voor pushState

Wijzigingen van SPA-routes, zoals op een navigatielink klikken zonder de pagina volledig opnieuw te laden, een modaal venster openen zodat de knop voor terugnavigatie het venster sluit, en stappen in een wizard doorlopen. Elke betekenisvolle status moet een nieuw geschiedenisitem zijn, zodat de knop voor terugnavigatie doet wat gebruikers verwachten.

Gebruikssituaties voor replaceState

Updates van filters, sortering en paginering die de geschiedenis niet moeten vervuilen, doorsturen na het gedeeltelijk invullen van een formulier, en trackingparameters bijwerken zonder navigeerbare items te maken. Als de gebruiker op de knop voor terugnavigatie drukt, worden deze "tussenliggende" statussen overgeslagen.

De weergave bijwerken na pushState

pushState wijzigt alleen de URL — je code moet de DOM afzonderlijk bijwerken. Het patroon is: nieuwe inhoud weergeven en daarna pushState aanroepen. Samen zorgen die twee voor de SPA-ervaring.

function navigate(path) {
  renderPage(path);
  history.pushState(null, "", path);
  window.scrollTo(0, 0);
}

Titel- en metagegevens bijwerken

Werk na navigatie document.title en metatags met og:title bij, zodat delen op sociale media en titels van browsertabbladen de huidige weergave weerspiegelen. Als je dit vergeet, blijft bij volgende deelacties de oorspronkelijke titel staan — een subtiele maar veelvoorkomende SPA-fout.

Eerste pushState bij het laden van de pagina

Als je pushState aanroept voordat de gebruiker heeft genavigeerd, overschrijf je het eerste geschiedenisitem. Gebruik replaceState om status aan het eerste geschiedenisitem van de pagina te koppelen — zo voeg je de status toe zonder de diepte van de geschiedenis te wijzigen.

Beveiligingsbeperking

URL's voor pushState moeten dezelfde oorsprong hebben. Als je pushState probeert aan te roepen voor https://evil.com, veroorzaakt dit een SecurityError. Zo wordt voorkomen dat pagina's de adresbalk vervalsen, zodat gebruikers denken dat ze op een andere website zijn.

Kenniscontrole

Wat doet history.replaceState wel en history.pushState niet?

Samenvatting

pushState voegt een nieuw geschiedenisitem toe zonder de pagina opnieuw te laden — de basis van SPA-routering. replaceState werkt het huidige item op zijn plaats bij voor cosmetische URL-wijzigingen. Voor beide zijn URL's met dezelfde oorsprong vereist en het argument title wordt genegeerd. Werk de DOM altijd afzonderlijk bij en vergeet niet om document.title en metatags na navigatie bij te werken.

Gratis beginnen

Leer HTML met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “pushState en replaceState” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad HTML Academy, waaronder “pushState en replaceState”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus HTML Academy bevat in totaal 4 lessen.

Wat leer ik in “pushState en replaceState”?

Werk de browser-URL bij zonder de volledige pagina opnieuw te laden Je oefent met HTML Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met HTML Academy te beginnen?

Ervaring vooraf is niet nodig. HTML Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “pushState en replaceState”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over HTML Academy?

Ja. Elke les over HTML Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. pushState en replaceState
  2. Het popstate-event
  3. Routing op basis van hash versus pad
  4. De Navigation API in moderne browsers
← Terug naar HTML Academy