Отслеживайте, когда пользователь нажимает кнопку «Назад» в браузере
-
09-06-2019 - |
Вопрос
Можно ли определить, когда пользователь нажимает кнопку «Назад» в браузере?
У меня есть приложение Ajax, и если я смогу определить, когда пользователь нажимает кнопку «Назад», я могу отобразить соответствующие данные обратно.
Любое решение, использующее PHP, JavaScript предпочтительнее.Черт возьми, решение на любом языке подойдет, просто нужно что-то, что я могу перевести на PHP/JavaScript.
Редактировать:Вырезаем и вставляем снизу:
Вау, все отличные ответы.Я хотел бы использовать Yahoo, но я уже использую библиотеки Prototype и Scriptaculous и не хочу добавлять дополнительные библиотеки ajax.Но он использует iFrames что дает мне хороший совет для написания собственного кода.
Решение
Есть несколько способов сделать это, хотя некоторые из них работают только в определенных браузерах.Я знаю, что нужно встроить на страницу крошечный, почти невидимый iframe.Когда пользователь нажимает кнопку «Назад», iframe перемещается назад, что вы можете обнаружить, а затем обновить свою страницу. Здесь это другое решение.
Вы также можете просмотреть исходный код чего-то вроде Gmail и посмотреть, как они это делают.
Вот кстати, библиотека для того, что ты ищешь
Другие советы
Одна из моих любимых сред для этого — Менеджер истории браузера Yahoo!.Вы регистрируете события, и он перезванивает вам, когда пользователь возвращается в это состояние.И если вы хотите узнать, как это работает, вот забавная запись в блоге о решениях Yahoo!сделал при его проектировании.
Невозможно определить, когда пользователь нажимает кнопку «Назад» или нажимает клавишу Backspace, чтобы вернуться в браузер, однако есть и другие события, которые происходят в определенном порядке и которые можно обнаружить.Этот пример javascript имеет достаточно хороший метод обнаружения обратных команд:
Однако традиционный способ — отслеживать перемещение пользователей по вашему сайту с помощью файлов cookie или страниц перехода.Когда пользователь переходит на страницу A, затем на страницу B, затем снова появляется на странице A (особенно, когда нет ссылки с B на A), вы знаете, что он вернулся - A может обнаружить это и перенаправить его или иным образом.
Библиотека пользовательского интерфейса Yahoo, моя любимая JS-библиотека на стороне клиента, имеет превосходную Менеджер истории браузера это делает именно то, о чем вы просите.
Самый простой способ проверить, вернулись ли вы к кэшированной версии своей страницы, которую необходимо обновить, — это добавить скрытый элемент ввода, который будет кэшироваться, и вы сможете проверить, имеет ли он все еще значение по умолчанию.
Просто поместите следующее в тег body.Я помещаю свой прямо перед закрывающим тегом.
<input type="hidden" id="needs-refresh" value="no">
<script>
onload=function(){
var e = document.getElementById("needs-refresh");
if (e.value === "yes")
location.reload();
e.value = "yes";
}
</script>
Я установил переменную $wasPosted
в $_SESSION
со стоимостью false
.
Все мои сообщения проходят через один и тот же файл php и устанавливаются $wasPosted
к true
.
Все header(location:)
запросам предшествует установка $wasPosted
к true
.
Если $wasPosted
является false
затем страница загружалась после использования кнопок назад или вперед.
Инструментарий dojo имеет функциональные возможности для решения этой проблемы в JavaScript.Я не думаю, что есть хороший способ справиться с этим на чистом PHP.
Вот страница документации, которая у них есть: http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/back-button-undo