On - window.location.hash - Изменить? - PullRequest
540 голосов
/ 25 марта 2009

Я использую Ajax и хэш для навигации.

Есть ли способ проверить, изменился ли window.location.hash следующим образом?

http://example.com/blah#123 до http://example.com/blah#456

Это работает, если я проверяю его при загрузке документа.

Но если у меня есть навигация на основе #hash, она не работает, когда я нажимаю кнопку возврата в браузере (поэтому я перехожу с бла # 456 на бла # 123).

Он отображается внутри адресной строки, но я не могу поймать его с помощью JavaScript.

Ответы [ 13 ]

1 голос
/ 25 февраля 2011
var page_url = 'http://www.yoursite.com/'; // full path leading up to hash;
var current_url_w_hash = page_url + window.location.hash; // now you might have something like: http://www.yoursite.com/#123

function TrackHash() {
    if (document.location != page_url + current_url_w_hash) {
        window.location = document.location;
    }
    return false;
}
var RunTabs = setInterval(TrackHash, 200);

Вот и все ... теперь, каждый раз, когда вы нажимаете кнопки «назад» или «вперед», страница будет перезагружаться в соответствии с новым значением хеш-функции.

1 голос
/ 28 августа 2010

Другая отличная реализация - jQuery History , которая будет использовать собственное событие onhashchange, если оно поддерживается браузером, если нет, то будет использовать iframe или интервал для браузера соответствующим образом, чтобы гарантировать, что все ожидаемые функции успешно эмулируется. Он также предоставляет удобный интерфейс для привязки к определенным состояниям.

Также стоит отметить еще один проект - jQuery Ajaxy , который в значительной степени является расширением для истории jQuery для добавления ajax к миксу. Как и когда вы начинаете использовать ajax с хешами, он становится довольно сложным !

0 голосов
/ 28 декабря 2009

Я использовал плагин jQuery, HUtil , и написал YUI History-подобный интерфейс поверх него.

Проверьте это один раз. Если вам нужна помощь, я могу помочь.

...