In Single page applications, we will not have dedicated URLs. So on click of Browser Back button it will navigate us to previous page and we lost our current page changes. We can handle this with native JavaScript functions,
Create Html Page as below to mimic SPA,
On click of each Page button, it can switch the content,
On Each Page navigation we can set the hash URL something like below using history.pushstate or location.hash
Now on click of back button use the hashchange event to detect and open the page accordingly
Here is full code:
<html>
<head>
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
</head>
<body>
<input type="button" value="Page1" onclick="openPage('1');" />
<input type="button" value="Page2" onclick="openPage('2');" />
<input type="button" value="Page3" onclick="openPage('3');" />
<div id="page1" class="page">Page 1 Content</div>
<div id="page2" class="page">Page 2 Content</div>
<div id="page3" class="page">Page 3 Content</div>
<div id="history"></div>
</body>
<script>
$(document).ready(function () {
hideAllPages();
$(window).on('popstate', (e) => {
e.preventDefault();
var currentLocation = window.location.pathname;
history.push(currentLocation)
});
return "Are you sure you want to leave this page?";
addEventListener("hashchange", (event) => {
alert("New" + event.newURL);
alert("Old" + event.oldURL);
var currentHash =
event.currentTarget.location.hash;
openPage(currentHash.replace("#", ""), true);
function hideAllPages() {
$(".page").hide();
}
hideAllPages();
$("#page" + pageId).show();
if (!ignoreHistoryPush) //This is to not add history on everytime
history.pushState({ page: pageId }, pageId, '#' + pageId);
//location.hash = pageId //This way also can set it
}
</script>
</html>
No comments:
Post a Comment