Ах, кнопка назад. Вы можете себе представить, что «back» запускает событие JavaScript, которое вы можете просто отменить, например:
document.onHistoryGo = function() { return false; }
Нет, не так. Просто нет такого события.
Если у вас действительно есть веб-приложение (в отличие от просто веб-сайта с некоторыми функциями ajaxy), разумно перейти на кнопку возврата (с фрагментами в URL, как вы упомянули). Gmail делает это. Я говорю о том, когда ваше веб-приложение все на одной странице, все автономно.
Техника проста & mdash; всякий раз, когда пользователь предпринимает действия, которые изменяют вещи, перенаправляйте на тот же URL, который вы уже используете, но с другим фрагментом хеша. Э.Г.
window.location.hash = "#deleted_something";
...
window.location.hash = "#did_something_else";
Если общее состояние вашего веб-приложения можно изменить, это отличное место для использования хэша. Скажем, у вас есть список электронных писем, может быть, вы объедините все их идентификаторы и прочитанные / непрочитанные состояния и возьмете хеш MD5, используя его в качестве идентификатора фрагмента.
Этот тип перенаправления (только для хэша) не пытается извлечь что-либо с сервера, но он вставляет слот в список истории браузера. Таким образом, в приведенном выше примере пользователь нажимает «назад», и теперь он показывает # Удалено_Something в адресной строке. Они наносят ответный удар снова, и они все еще на вашей странице, но без хеша. Затем вернитесь обратно, и они на самом деле вернутся туда, откуда они пришли.
Теперь самое сложное - заставить ваш JavaScript определять, когда пользователь наносит ответный удар (так что вы можете вернуть состояние). Все, что вам нужно сделать, это посмотреть расположение окна и посмотреть, когда оно изменится. С опросом. (Я знаю, черт, опрос. Ну, нет ничего лучше кроссбраузерного прямо сейчас). Вы не сможете определить, продвинулись ли они вперед или назад, поэтому вам придется проявить творческий подход к своим хеш-идентификаторам. (Возможно, хеш объединен с порядковым номером ...)
Это суть кода. (Так же работает плагин jQuery History.)
var hash = window.location.hash;
setInterval(function(){
if (window.location.hash != hash) {
hash = window.location.hash;
alert("User went back or forward to application state represented by " + hash);
}
}, 100);