Comments 22
Как долго к этому приходили… Мне все это приходилось вручную реализовывать.
UFO landed and left these words here
Сейчас с HTML5 History API мы можем отлавливать кнопки вперед, назад, используя метод pushState и событие popstate. В статье все хорошо описано. И в примере все работает (потыкайте по картинкам, а потом нажмите кнопку назад/вперед). HTML5 History API похож на location.hash magic, но только без магии и вместо хеша мы имеем реальный url, который можем кому-нибудь отправить или загрузить реальный документ тем же wget'ом.
UFO landed and left these words here
Думаю, это сделано из соображений безопасности. Т.е. мы можем использовать только те стейты, которые создали сами, а не брать чужие.
UFO landed and left these words here
Думаю лучше, стандарт должен быть кроссбраузерным по идее. А когда свою навигацию строишь, приходится отлавливать такие глюки, как например в опере — когда несколько раз нажмешь на ссылку с одним якорем, потом ровно столько же раз нужно отмотать назад, при этом другие браузеры переходы по идентичным хэшам второй раз не фиксирут. Я пока этот ньюанс узнал, уйму времени потерял.
только вот если нажать на «Refresh» в броузере то откроется только картинка. Судя по всему без костылей пока не обойтись.
Это пример так сделан коряво. Нормально History API работает. Сам пробовал для нормальных браузеров его использовать, а для паранормальных по старинке с обновлением страницы. Ничего сложного в этом нет, не считая того факта, что Chrome посылает события об изменении урла при первом открытии страницы, что есть моветон (кстати в статье о подобных нюансах ни единого слова...).
Это не баг примера, а его фича:
Кроме этого при клике на картинку мы получаем в адресной строке её действительный адрес, который мы можем сохранить или отправить кому-нибудь.

Если бы мы немного подправили код на сервере, то могли бы получать состояние как при закрытии.
«Опера» 11.50 под Мак, кнопки истории в примере остаются неактивными.
Windows 7 — аналогичною. Баг оперы вестимо. Кнопки проявляются после нажатия Backspace.
Было бы здорово, если бы можно было говорить счетчикам посещаемости, что сделан переход на следующую страницу или страницу назад, в общем чтобы считчики как обычно считали переходы по сайту, может их код тоже целиком перезагружать… но тогда нужно наверное очищать некоторые переменные и объекты, которые они создали… никто не сталкивался?
В этом случае лучше перезагружать код, чтобы счетчик думал, что пользователь на самом деле перешел по ссылке.
Для гуглосчетчика это сделать элементарно. Для него можно на яваскрипте регистрировать любые произвольные события. Подробнее можно почитать вот тут
Кстати, Вконтакте использует это уже Х месяцев, благодаря этому флэш-плеер всегда на виду и играет даже при переходах на др. страницы, молодцы ребята.
Автор, спасибо за статью, давно ждал!
Для jQuery, кстати, есть библиотеки для работы с историей, которые используют history API в новых браузерах и манипуляции с location.hash в старых. Я в одном проекте использовал jQuery BBQ.
Only those users with full accounts are able to leave comments. Log in, please.