Ce face history.pushState / replaceState
pushState adaugă o intrare nouă în istoric, cu adresa dată: bara de adrese se schimbă, dar pagina nu se reîncarcă. replaceState înlocuiește intrarea curentă (util pentru filtre, ca butonul Înapoi să nu treacă prin fiecare modificare).
Primul parametru este un obiect salvat cu intrarea, disponibil în history.state; al doilea nu mai este folosit (dă ""). Când utilizatorul apasă Înapoi sau Înainte, primești evenimentul popstate și trebuie să afișezi conținutul potrivit adresei.
Parametri
| Parametru | Descriere |
|---|---|
stare |
Date asociate intrării (copiate, ca la structuredClone). |
url |
Opțional. Adresa nouă, pe același domeniu. |
Ce returnează
undefined.
Exemple
Exemplul 1: File de conținut cu adrese proprii
function arataFila(nume, adauga = true) {
document.querySelector("#continut").textContent = `Conținut: ${nume}`;
if (adauga) history.pushState({ fila: nume }, "", `/cont/${nume}/`);
}
window.addEventListener("popstate", (e) => arataFila(e.state?.fila ?? "profil", false));
arataFila("comenzi");
console.log(location.pathname, history.state);
history.replaceState({ fila: "comenzi", pagina: 2 }, "", "?pagina=2");
console.log(location.href);
Rezultat în browser
/cont/comenzi/ { fila: 'comenzi' }
https://www.exemplu.ro/cont/comenzi/?pagina=2
Greșeli frecvente
- Schimbi adresa cu
pushStateși nu tratezipopstate. Butonul Înapoi schimbă adresa, dar pagina rămâne aceeași. - Dai o adresă de pe alt domeniu și primești
SecurityError.
Comenzi înrudite
history.back / forward / go: Navighează înapoi sau înainte în istoricul filei, ca butoanele browserului.location.reload / assign / replace: Reîncarcă pagina sau navighează la altă adresă, cu sau fără păstrarea paginii curente în istoric.new URL(): Desface o adresă URL în părți (domeniu, cale, parametri) și o construiește corect la loc.