Вы можете использовать функцию history.replaceState()
из History API для достижения такого поведения.Когда пользователь нажмет на якорь, вы просто замените текущий элемент истории вместо добавления нового.
Редактировать: window.location.replace()
Другой подход заключается в использовании window.location.replace () , который не добавляет новую запись в историю браузера:
Метод Location.replace () заменяет текущий ресурс ресурсом по указанному URL-адресу.Отличие от метода assign () состоит в том, что после использования replace () текущая страница не будет сохранена в истории сеансов, то есть пользователь не сможет использовать кнопку «Назад» для перехода к ней.
Итак, что можно сделать для достижения желаемого результата, это добавить обработчик onclick для элемента body
с внутренней логикой, которая заменит текущее местоположение, если текущее местоположение не является домашней страницей (или любой другой страницей).Этот обработчик будет похож на код ниже:
function handler (event) {
if (!isAnchor(event.target) return; // return if clicked element is not an anchor (isAnchor function should be also implemented by you. For example, you can add some class on every anchor and check if clicked element is <a> tag with this class)
if (window.location.href !== window.location.origin) { // check if you are currently on the homepage
event.preventDefault(); // if not on homepage then prevent default <a> tag redirect
window.location.replace(event.target.href); // and replace current history item URL with the new URL
}
}