Отслеживать, когда пользователь нажимает кнопку «Назад» в браузере - PullRequest
23 голосов
/ 11 сентября 2008

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

У меня есть приложение Ajax, и если я могу определить, когда пользователь нажимает кнопку «Назад», я могу отобразить соответствующие данные обратно

Любое решение с использованием PHP, JavaScript предпочтительнее. Черт, решение на любом языке прекрасно, просто нужно что-то, что я могу перевести на PHP / JavaScript

Редактировать: вырезать и вставлять снизу:

Ух ты, все отличные ответы. Я бы хотел использовать Yahoo, но я уже использую библиотеки Prototype и Scriptaculous и не хочу добавлять больше библиотек ajax. Но он использует iFrames , что дает мне хороший указатель для написания собственного кода.

Ответы [ 7 ]

16 голосов
/ 11 сентября 2008

Одна из моих любимых платформ для этого - Диспетчер истории браузера Yahoo! . Вы регистрируете события, и он перезванивает вам, когда пользователь возвращается в это состояние. И если вы хотите узнать, как это работает, вот забавная запись в блоге о решениях Yahoo! сделал при проектировании.

14 голосов
/ 11 сентября 2008

Есть несколько способов сделать это, хотя некоторые будут работать только в определенных браузерах. Единственное, что я знаю по макушке головы, - это вставить крошечный почти невидимый фрейм на страницу. Когда пользователь нажимает кнопку «Назад», iframe перемещается назад, который вы можете обнаружить, а затем обновить свою страницу. Здесь - другое решение.

Возможно, вы захотите просмотреть исходные тексты, например gmail, и посмотреть, как они это делают.

Вот библиотека для того, что вы ищете, кстати

7 голосов
/ 11 сентября 2008

Невозможно определить, когда пользователь нажимает кнопку «Назад» или нажимает клавишу «Backspace», чтобы вернуться в браузер, однако существуют другие события, которые происходят в определенном порядке, которые можно обнаружить. Этот пример javascript имеет достаточно хороший метод для обнаружения команд возврата:

Однако традиционным способом является отслеживание движения пользователя по вашему сайту с помощью файлов cookie или страниц реферера. Когда пользователь переходит на страницу A, затем на страницу B, а затем снова появляется на странице A (особенно когда на B нет ссылки на A), вы знаете, что он вернулся - A может обнаружить это и перенаправить их или иным образом.

3 голосов
/ 30 октября 2015

Самый простой способ проверить, вернулись ли вы к кешированной версии вашей страницы, которую необходимо обновить, - это добавить скрытый элемент ввода, который будет кешироваться, и вы можете проверить, имеет ли он значение по умолчанию.

Просто поместите следующее в свой тег тела. Я помещаю свой прямо перед конечным тегом.

<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>
3 голосов
/ 11 сентября 2008

Библиотека пользовательского интерфейса Yahoo, моя любимая клиентская JS-библиотека, имеет превосходный Диспетчер истории браузера , который делает именно то, что вы просите.

2 голосов
/ 16 декабря 2015

Я установил переменную $wasPosted в $_SESSION со значением false.

Все мои сообщения проходят через один и тот же php-файл и устанавливают $wasPosted на true.

Всем header(location:) запросам предшествует установка $wasPosted в true.

Если $wasPosted равно false, то страница загружалась после использования кнопок «назад» или «вперед».

1 голос
/ 16 сентября 2008

Инструментарий Dojo имеет функциональные возможности для решения этой проблемы в JavaScript. Я не думаю, что есть хороший способ справиться с этим на чистом PHP.

Вот страница документации, которая у них есть: http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/back-button-undo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...