How do you use `window.history` API?
TL;DR
The window.history API allows you to manipulate the browser's session history. You can use history.pushState() to add a new entry to the history stack, history.replaceState() to modify the current entry, and history.back(), history.forward(), and history.go() to navigate through the history. For example, history.pushState({page: 1}, "title 1", "?page=1") adds a new entry to the history.
Using the window.history API
The window.history API provides methods to interact with the browser's history stack. This can be useful for single-page applications (SPAs) where you want to manage the URL and browser history without causing a full page reload.
Methods
history.pushState()
This method adds a new entry to the history stack.
history.pushState({ page: 1 }, 'title 1', '?page=1');- The first parameter is a state object associated with the new history entry.
- The second parameter is the title of the new history entry (currently ignored by most browsers).
- The third parameter is the URL to be displayed in the address bar.
history.replaceState()
This method modifies the current history entry.
history.replaceState({ page: 2 }, 'title 2', '?page=2');- The parameters are the same as
pushState(), but this method replaces the current entry instead of adding a new one.
history.back()
This method moves the user back one entry in the history stack, similar to clicking the browser's back button.
history.back();history.forward()
This method moves the user forward one entry in the history stack, similar to clicking the browser's forward button.
history.forward();history.go()
This method moves the user a specified number of entries in the history stack.
// Move back one entry
history.go(-1);
// Move forward one entry
history.go(1);
// Reload the current page
history.go(0);Example
Here's a simple example demonstrating the use of pushState and replaceState:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>History API Example</title>
</head>
<body>
<button id="pushStateBtn">Push State</button>
<button id="replaceStateBtn">Replace State</button>
<button id="backBtn">Back</button>
<button id="forwardBtn">Forward</button>
<script>
document.getElementById('pushStateBtn').addEventListener('click', () => {
history.pushState({ page: 1 }, 'title 1', '?page=1');
});
document
.getElementById('replaceStateBtn')
.addEventListener('click', () => {
history.replaceState({ page: 2 }, 'title 2', '?page=2');
});
document.getElementById('backBtn').addEventListener('click', () => {
history.back();
});
document.getElementById('forwardBtn').addEventListener('click', () => {
history.forward();
});
</script>
</body>
</html>