Есть ли способ ответить на нажатие кнопки назад (или нажатие на обратное пространство) в javascript, когда изменяется только хеш местоположения? То есть, когда браузер не взаимодействует с сервером или не перезагружает страницу.
Есть ли способ поймать событие кнопки "Назад" в javascript?
Ответ 1
Используйте событие hashchange
:
window.addEventListener("hashchange", function(e) {
// ...
})
Если вам нужно поддерживать более старые браузеры, ознакомьтесь с hashchange
секцией > в странице вики-страницы Polyphills в браузере Modernizr HTML5.
Ответ 2
Я создал решение, которое может быть полезно для некоторых людей. Просто добавьте код на свою страницу, и вы можете написать свою собственную функцию, которая будет вызываться при нажатии кнопки "Назад".
Я тестировал в IE, FF, Chrome и Safari, и все они работают. Однако решение, основанное на iframe, без необходимости постоянного опроса, в IE и FF, из-за ограничений в других браузерах, в Safari используется хеш местоположения.
Ответ 3
Я сделал забавный взлом, чтобы решить эту проблему до моего удовлетворения. У меня есть сайт AJAX, который динамически загружает контент, а затем изменяет window.location.hash, и у меня был код для работы с $(document).ready() для синтаксического анализа хэша и загрузки соответствующего раздела. Дело в том, что я был совершенно доволен кодом загрузки раздела для навигации, но хотел добавить способ перехвата кнопок браузера назад и вперед, которые меняют местоположение окна, но не мешают моим текущим подпрограммам загрузки страницы, где я манипулирую window.location, и опрос окна. Ячейка с постоянными интервалами не может быть и речи.
В результате я создал объект как таковой:
var pageload = {
ignorehashchange: false,
loadUrl: function(){
if (pageload.ignorehashchange == false){
//code to parse window.location.hash and load content
};
}
};
Затем я добавил строку на мой сайт script для запуска функции pageload.loadUrl
на hashchange как таковой:
window.addEventListener("hashchange", pageload.loadUrl, false);
Затем, в любое время, когда я хочу изменить window.location.hash
, не запуская эту процедуру загрузки этой страницы, я просто добавляю следующую строку перед каждой строкой window.location.hash =
:
pageload.ignorehashchange = true;
а затем следующую строку после каждой строки модификации хэш:
setTimeout(function(){pageload.ignorehashchange = false;}, 100);
Итак, теперь мои процедуры загрузки разделов обычно запускаются, но если пользователь нажимает кнопки "назад" или "вперед", новое местоположение анализируется и загружается соответствующий раздел.
Ответ 4
Отъезд history.js. Существует событие изменения состояния html 5 и вы можете его прослушать.
Ответ 5
Вы посмотрели на это? http://developer.yahoo.com/yui/history/
Ответ 6
onLocationChange
также может быть полезна. Не уверен, что это только Mozilla, но кажется, что это может быть.