Я предполагаю, что вы хотите создать одностраничное приложение, которое не будет перезагружать веб-сайт во время навигации пользователя, и, следовательно, вы хотите отменить встроенную функциональность кнопки «Назад» и заменить ее своей. Это также может быть полезно в мобильных веб-приложениях, где использование кнопки «Назад» внутри приложений является обычным делом, например, для закрытия окна в приложении. Чтобы достичь этого без библиотеки , вам необходимо:
1-й. Во всем приложении изменяйте location.hash
окна вместо location.href
(это то, что теги будут делать по умолчанию). Например, ваши кнопки могут запускать при нажатии события, которые изменяют location.hash
следующим образом:
button.addEventListener('click', function (event) {
// Prevent default behavior on <a> tags
event.preventDefault()
// Update how the application looks like
someFunction()
// Update the page's address without causing a reload
window.location.hash = '#page2'
})
Делайте это с каждой имеющейся у вас кнопкой или тегом, которые иначе перенаправили бы на другую страницу и вызвали бы перезагрузку.
2nd. Загрузите этот код, чтобы вы могли запускать функцию при каждом изменении истории страниц (как вперед, так и назад). Вместо переключателя, который я использовал в этом примере, вы можете использовать if и проверять другие состояния, даже состояния и переменные, не связанные с location.hash
. Вы также можете полностью заменить любое условие и просто запускать функцию каждый раз, когда изменяется история.
window.onpopstate = function() {
switch(location.hash) {
case '#home':
backFromHome()
break
case '#login':
backFromLogin()
break
default:
defaultBackAnimation()
}
}
Это будет работать до тех пор, пока пользователь не достигнет первой страницы, которую он открыл с вашего веб-сайта, затем вернется к новой вкладке или к другому веб-сайту, на котором он был до этого. Этого нельзя предотвратить, и команды, разрабатывающие браузеры, исправляют ошибки, которые позволяют это, если пользователь хочет выйти из вашего сайта, вернувшись назад, он ожидает, что браузер сделает это.