pushState () и popState (): манипулирование историей браузеров
Я работаю над небольшим проектом, в котором я хочу создать сайт в стиле Ajax. Контент загружен с помощью jQueryload()
, Как некоторые из вас знают, недостатком этого является то, что URL не изменяется в соответствии с отображаемым контентом. Чтобы сделать эту работу вы можете использоватьpushState()
, Поскольку это не поддерживается кросс-браузер, я использовал плагинhistory.js
.
Это работает довольно хорошо, но проблема в том, что мои кнопки «назад» и «вперед» не работают должным образом, и я понятия не имею, что я делаю неправильно. URL-адрес меняется правильно, и содержание также, но заголовок не меняется вообще. Под заголовком я подразумеваю то, что отображается как заголовок окна (или вкладки) окна браузера. То есть<title>
загруженной страницы ИЛИ атрибут заголовка ссылки, которая ссылается на эту страницу (они одинаковы). Я думаю, что это связано с тем, что я называю только часть страницы, чей заголовок мне нужен (т. Е. Путем добавления#content
кload()
). Я все еще хочу заголовок этой страницы, хотя. Вот контрольный пример того, что у меня есть до сих пор. (Больше не доступно с 28 декабря 2013 года.) Файл jQuery:
$(document).ready(function () {
var firstLink = $("ul > li:first-child > a");
var menuLink = $("ul > li > a");
var firstLoadedHtml = firstLink.attr("href") + " #content";
$("#sectionContainer").hide().load(firstLoadedHtml).fadeIn("fast");
firstLink.addClass("active");
menuLink.click(function(e) {
history.pushState(null, null, this.href);
e.preventDefault();
e.stopImmediatePropagation();
var CurLink = $(this);
var newLoadedHtml = CurLink.attr("href") + " #content";
var oldSection = $(".contentPage");
$("#sectionContainer").hide().load(newLoadedHtml).fadeIn("fast");
menuLink.removeClass("active");
CurLink.addClass("active");
});
$(window).bind('popstate', function() {
var returnLocation = history.location || document.location;
$('#sectionContainer').load(returnLocation + "#content");
});
});
Я также отметил, что при возврате к базовой странице (то есть / sectionLoaderTest /) она некоторое время очищается и только через некоторое время загружается содержимое первой страницы. Есть ли способ оптимизировать это?
Кроме того, я использую jQuery для добавления активного класса к ссылке, по которой щелкнули. Как я могу убедиться, что это меняется в соответствии с историей? Чтобы правильная ссылка выделялась при переходе пользователя назад?
Итак, три вопроса:
Get the title working when going forward and backward Optimize the load time of the mainpage Fix the active-class when going forward and backwardВся помощь приветствуется!
NOTE 1: Я хотел бы опираться на history.js и мой собственный скрипт, и поэтому поддерживаю поддержку< HTML5
браузеры. Я бы предпочел это, потому что: 1. Я знаю, что это должно работать, просто что-то идет не так. 2. Было бы сэкономлено время, если бы я мог увидеть одно решение и реализовать его в сценарии, который я уже написал, вместо того, чтобы выяснять совершенно новый сценарий.
NOTE 2: Щедрость будет дана только ему или ей, кто может ответить на все мои вопросы (3)!