Ах, кнопка назад. Ви можете собі уявити, що "назад" запускає подію JavaScript, яку ви можете просто скасувати так:
document.onHistoryGo = function() { return false; }
Ні, так. Такої події просто немає.
Якщо у вас справді є веб-програма (на відміну від просто веб-сайту з деякими функціями ajaxy), розумно взяти на себе кнопку повернення (із фрагментами в URL-адресі, як ви вже згадували). Gmail робить це. Я говорю про те, коли ваш веб-додаток усього на одній сторінці, весь автономний.
Техніка проста - щоразу, коли користувач вживає дій, що змінюють речі, переспрямовуйте на ту саму URL-адресу, на якій ви вже знаходитесь, але з іншим хеш-фрагментом. Напр
window.location.hash = "#deleted_something";
...
window.location.hash = "#did_something_else";
Якщо загальний стан вашої веб-програми є хеш, це чудове місце для використання хешу. Скажімо, у вас є список електронних листів, можливо, ви об’єднаєте всі їх ідентифікатори та прочитані / непрочитані статуси, і візьмете хеш MD5, використовуючи його як ідентифікатор фрагмента.
Цей тип переспрямування (лише хеш) не намагається отримати нічого з сервера, але він вставляє слот у список історії браузера. Отже, у наведеному вище прикладі користувач натискає "назад", і тепер у адресному рядку відображається #deleted_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);