Я могу дать вам ответ на этот вопрос, потому что я столкнулся и решил эту проблему.
Сначала нужно понять несколько понятий:
- JavaScript не может напрямую изменить историю браузера.
- всякий раз, когда базовый URL-адрес iframe на странице изменяется, история обновляется. (но это имеет некоторые странности с разными браузерами).
- URL содержит «хэшированную» часть: например, в URL
http://mail.google.com/mail#inbox
, #inbox
- хэшированная часть. Давайте назовем это "хэш". поэтому http://mail.google.com/mail
будет нашим «базовым URL».
История отслеживания GMail в основном делается с помощью трюков, основанных на этом "хэше".
Итак, еще несколько понятий:
- при изменении URL-адреса в адресной строке история обновляется (предыдущий URL входит в историю)
- при изменении базового URL страница перезагружается.
- когда хэш-часть URL-адреса изменяется без изменения базового URL-адреса, страница не перезагружается.
Итак, когда вы переходите с http://mail.google.com/mail#inbox
на http://mail.google.com/mail#sent
, страница не обновляется .
Теперь, если GMail получит уведомление о событии при изменении хэша, тогда gmail может предпринять действия, основанные на этом. К сожалению, нет событий DOM, которые могли бы помочь нам зафиксировать действия в истории. Таким образом, вместо этого (это часть, которая показывает, как я преодолел проблему), мы запускаем бесконечный цикл, который проверяет изменения в хэше. Если он наблюдает изменение, мы обнаруживаем нажатие кнопки «назад» или «вперед» браузера.
Для решения этой проблемы я создал удобный инструмент: анализатор URL . Он может анализировать GET-параметры в URL, а также параметры, закодированные в Hash. Попробуйте демо-версию!
Ура!
Об этой проблеме в IE: я не осознавал, что это решение, основанное на хэше, не работает в IE (плохой старый разработчик Linux).
Но для IE вы можете использовать скрытый iframe и использовать его свойство "url влияет на историю" для реализации истории. Я знаю, что в этом утверждении отсутствуют детали, но это связано с моим собственным опытом работы с IE.
Я попробую это решение и продолжу:)
В Интернете я нашел множество ссылок, которые правильно реализуют историю, используя хэш iframes / location. У меня не хватило терпения выкопать различия между интерфейсом iframe в разных браузерах.
Полагаю, я бы предпочел плагин jquery . У YUI тоже есть менеджер истории.
Ура!