Адрес JQuery: невозможно обработать входящие глубокие ссылки?
Я использую этот плагин с AJAX-загрузкой на моей странице, которая, честно говоря, обрабатывает все довольно хорошо, за исключением случаев, когда я пытаюсь перехватить входящие ссылки, в которых нет хеш-фрагмента.
Адресная строка
входящая ссылка-> hostname.com/path/
пользователь переходит к другому состоянию ajax-> hostname.com / path / #hash
Здесь я ожидаю, что плагин не будет включать путь в адресную строку, потому что хэш представляет это.
AJAX GET
входящая ссылка-> hostname.com/path/
пользователь переходит к другому состоянию ajax-> hostname.com/path/
Фактический запрос загружает правильное состояние.
есть ли способ, чтобы это не добавить путь к адресной строке?
например
Имя хоста /# веб-разработки
вместо:
имя хоста / веб-разработка /# веб-разработки
Обработка кликов
$ ('a.internalLink'). live ('click', function (event) {
event.preventDefault (); clickedLink = $ (this); $.Address.value(clickedLink.attr('HREF') заменить (основание,'').); });
2 ответа
Я обошел проблему, перенаправив любые не хэшированные URL-адреса в хэшированный эквивалент следующим образом:
if(!window.location.hash){ window.location.href = 'http://'+window.location.host+'/#'+window.location.pathname+window.location.search; };
Это не так элегантно, возможно, есть лучшее решение, но оно работает.
Вы должны зафиксировать событие щелчка по метке привязки и предотвратить действие по умолчанию, используя http://api.jquery.com/event.preventDefault/;
$(document).delegate('a', 'click', function (event) {
var targetHref = this.href;
window.location.href = targetHref; // or whatever
event.preventDefault(); // stop the page changing.
});
Вы также можете быть заинтересованы в новых дополнениях HTML 5, которые позволяют манипулировать историей браузера; То есть вы можете использовать AJAX для обновления страницы, но все равно измените адрес. Смотрите здесь для более подробной информации (Центр разработчиков Mozilla).