Pracuję nad małym projektem, w którym chcę stworzyć stronę w stylu Ajax. Treść jest ładowana za pomocą jQuery's load()
. Jak niektórzy z was wiedzą, wadą tego jest to, że adres URL nie zmienia się odpowiednio do wyświetlanej treści. Aby to zadziałało, możesz użyć pushState()
. Ponieważ nie jest to obsługiwane w różnych przeglądarkach, użyłem wtyczki history.js
.pushState() i popState(): manipulowanie historią przeglądarek
Działa to całkiem nieźle, ale problem polega na tym, że moje przyciski przewijania do przodu i do przodu nie działają tak, jak powinny i nie mam pojęcia, co robię źle. Adres URL zmienia się prawidłowo, a treść również, ale tytuł wcale się nie zmienia. Z tytułem mam na myśli to, co jest pokazane jako tytuł okna (lub zakładki) okna przeglądarki. To znaczy. <title>
załadowanej strony LUB atrybut tytułu linku, który odnosi się do tej strony (są one takie same). Myślę, że ma to związek z tym, że nazywam tylko sekcją strony, której tytuł jest mi potrzebny (tj. Dodając #content
do load()
). Nadal chcę jednak tytuł tej strony. Oto przypadek testowy tego, co mam do tej pory. (Niedostępne więcej od 28 grudnia 2013 roku) jQuery pliku:
$(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");
});
});
Ja również zauważyć, że po powrocie do strony podstawowej (tj/sectionLoaderTest /) to gaśnie na chwilę i dopiero po jakimś czasie treść pierwszej strony jest ładowana. Czy istnieje sposób na zoptymalizowanie tego?
Dodatkowo używam jQuery, aby dodać aktywną klasę do klikniętego łącza. Jak mogę się upewnić, że zmieni się to odpowiednio do historii? Czy poprawne łącze jest podświetlone, gdy użytkownik nawiguje z powrotem?
Więc trzy pytania:
- Zdobądź tytuł pracy, kiedy idziesz do przodu i do tyłu
- Optymalizacja czasu ładowania mainpage
- Fix aktywnej klasy idąc do przodu i do tyłu
Witaj!
UWAGA 1: Chciałbym zbudować na history.js i własnego skryptu i jako takie utrzymanie wsparcia dla < HTML5
przeglądarek. Wolałbym to, ponieważ: 1. Wiem, że to musi zadziałać, jest coś, co idzie źle. 2. Oszczędziło mi to czas, gdybym mógł zobaczyć swoje rozwiązanie i wdrożyć je w scenariuszu, który już napisałem, zamiast opracowywać zupełnie nowy scenariusz.
UWAGA 2: Nagroda zostanie przyznana tylko osobie, która może odpowiedzieć na wszystkie moje pytania (3)!
Nadal nie masz racji, zobacz przykład takich jak http://stackoverflow.com/questions/6622449/why-is-history-pushstate-not-supported-in-ie-are-there-some -inne-sposoby-do-ach/9470183 # 9470183 – devote
Twój komentarz nie jest naprawdę pomocny. Nie muszę implementować history.js (jeszcze), staram się tylko zrozumieć, co na razie robi pushState. Chcę rozwiązać ten problem. –
Mój komentarz wskazuje na twój błąd, jak rozmieścić metody przetwarzania zdarzenia.Metoda przechwytywania zdarzenia popstate, które wysłałeś nie jest poprawna, usuń go z metody działa po kliknięciu. – devote