Отслеживать, когда пользователь нажимает кнопку в браузере

Можно ли определить, когда пользователь нажимает кнопку браузера?

У меня есть приложение 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-библиотека, имеет отличный "Диспетчер истории браузеров" , который делает именно то, спрашивать.

Ответ 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>