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

StackOverflow https://stackoverflow.com/questions/55871

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top