Как отслеживать изменения в URL (Идентификатор фрагмента - якорная часть URL) - PullRequest
8 голосов
/ 01 ноября 2009

Я делаю сайт, который, как правило, обрабатывает все запросы на одной странице (Ajax). поэтому я подумал, что мог бы перехватить клик каждого пользователя по ссылке и проверить ЕСЛИ , что на моем веб-сайте я делаю что-то на JavaScript , например, запрос ajax, ELSE откроется ссылка как обычно!

делать часы на window.location не работает! и более того, я не знаю, есть ли в любом случае получить часть URL, которая находится после знака #. Примечание: и GMail, и Facebook делают это, я думаю, они используют что-то вроде этого:
http://mail.google.com/mail/#inbox
http://www.facebook.com/home.php#/inbox/?ref=mb

Пожалуйста, примите во внимание: , что я люблю использовать jQuery в своих проектах, поэтому любое решение, использующее его, является предпочтительным.

Есть идеи?

Ответы [ 5 ]

4 голосов
/ 01 ноября 2009

Для большинства последних браузеров в окне отправляется событие hashchange.

4 голосов
/ 01 ноября 2009

Часть URL фрагмента используется для включения истории навигации (кнопки «назад» и «вперед») на веб-сайтах с поддержкой AJAX. Если вы хотите «ловить» клики по ссылкам, так как вы все равно используете jQuery, вы можете просто сделать это:

$('a').click(function()
{
   var item = $(this);
   var url = item.attr('href');
   // your logic here
});

Если вы используете фрагменты (window.location.hash) в созвездии с AJAX, обратите внимание, что IE6 отправляет фрагментную часть url в запросах AJAX, что может привести к очень трудным для отладки ошибкам, поэтому имейте это в виду.

4 голосов
/ 01 ноября 2009

Вот еще одно хорошее прочтение: Восстановление обычной навигации браузера в приложениях AJAX

Выдержка из статьи:

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

Но у AJAX есть серьезный недостаток; Это нарушает стандартное поведение браузера, такое как Назад, Вперед и закладки служба поддержки. Вместо того, чтобы заставлять пользователей адаптироваться к недостаткам AJAX, разработчики должны сделать свой AJAX приложения соответствуют традиционное веб-взаимодействие стиль, .......

3 голосов
/ 01 ноября 2009

См. Ссылку @Pekka на Как проверить #hash в URL с помощью JavaScript? , чтобы посмотреть на хеш. Просто поместите эту функцию в обратный вызов на window.setInterval()

3 голосов
/ 01 ноября 2009

Simple:

if(window.location.hash) {
  // Fragment exists
} else {
  // Fragment doesn't exist
}

Ссылка: Как проверить #hash в URL с помощью JavaScript?

...