Отслеживать, когда пользователь нажимает кнопку в браузере
Можно ли определить, когда пользователь нажимает кнопку браузера?
У меня есть приложение Ajax, и если я могу обнаружить, когда пользователь нажимает кнопку "Назад", я могу отобразить соответствующие данные
Любое решение с использованием PHP, JavaScript предпочтительнее. Ад решение на любом языке прекрасно, просто нужно что-то, что я могу перевести на PHP/JavaScript
Изменить: вырезать и вставить снизу:
Ничего себе, все отличные ответы. Я бы хотел использовать Yahoo, но я уже использую библиотеки Prototype и Scriptaculous и не хочу добавлять больше библиотек ajax. Но он использует iFrames, который дает мне хороший указатель на мой собственный код.
Ответы
Ответ 1
Существует несколько способов сделать это, хотя некоторые из них будут работать только в определенных браузерах. Тот, который я знаю с самого начала, заключается в том, чтобы вставить на страницу крошечный невидимый iframe. Когда пользователь нажимает кнопку "Назад", iframe перемещается назад, что вы можете обнаружить, а затем обновить свою страницу. Здесь - другое решение.
Вы также можете захотеть просмотреть источник на чем-то вроде gmail и посмотреть, как они это делают.
Вот библиотека для той вещи, которую вы ищете, кстати
Ответ 2
Один из моих любимых фреймворков для этого - Yahoo! Диспетчер истории браузера. Вы регистрируете события и переадресовываете их, когда пользователь возвращает Назад в это состояние. И если вы хотите узнать, как это работает, здесь интересная запись в блоге о решениях Yahoo! сделанный при его разработке.
Ответ 3
Невозможно сказать, когда пользователь нажимает кнопку "Назад" нажимает клавишу "назад", чтобы вернуться в браузере, однако есть и другие события, которые происходят в определенном порядке, которые можно обнаружить. Этот пример javascript имеет достаточно хороший метод для обнаружения обратных команд:
Традиционным способом является отслеживание движения пользователя через ваш сайт с помощью файлов cookie или ссылок. Когда пользователь перейдет на страницу A, затем на страницу B, снова появится на странице A (особенно, когда нет ссылки на B на A), тогда вы знаете, что они вернулись - A может обнаружить это и перенаправить их или иначе.
Ответ 4
Библиотека пользовательского интерфейса Yahoo, моя личная любимая клиентская JS-библиотека, имеет отличный "Диспетчер истории браузеров" , который делает именно то, спрашивать.
Ответ 5
Инструментарий dojo имеет функциональность, чтобы справиться с этим в javascript. Я не думаю, что есть хороший способ справиться с этим в чистом PHP.
Вот страница документов, которые у них есть: http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/back-button-undo
Ответ 6
Я установил переменную $wasPosted
в $_SESSION
со значением false
.
Все мои сообщения идут через один и тот же php файл и устанавливают $wasPosted
в true
.
Все запросы header(location:)
предшествуют установке $wasPosted
в true
.
Если $wasPosted
- false
, тогда страница была загружена после использования кнопок "назад" или "вперед".
Ответ 7
Самый простой способ проверить, вернулись ли вы в кешированную версию своей страницы, которую нужно обновить, - это добавить скрытый элемент ввода, который будет кэшироваться, и вы можете проверить, имеет ли оно по умолчанию значение по умолчанию.
Просто поместите следующее в свой тег тела. Я помещаю его прямо перед тегом конца.
<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>