Ich arbeite an einem kleinen Projekt, in dem ich eine Ajax-Stil Website erstellen möchte. Der Inhalt wird mit load()
von jQuery geladen. Wie einige von Ihnen wissen, besteht der Nachteil darin, dass sich die URL nicht entsprechend dem angezeigten Inhalt ändert. Damit dies funktioniert, können Sie pushState()
verwenden. Da dies nicht browserübergreifend unterstützt wird, habe ich das Plug-in history.js
verwendet.pushState() und popState(): manipulieren Browser Geschichte
Das funktioniert ganz gut, aber das Problem ist, dass meine Vor- und Zurück-Tasten nicht funktionieren, wie sie sollten und ich habe keine Ahnung, was ich falsch mache. Die URL ändert sich korrekt und der Inhalt ist ebenfalls korrekt, aber der Titel ändert sich nicht. Mit Titel meine ich, was als Titel des Fensters (oder Tabs) des Browserfensters angezeigt wird. I.e. die <title>
der Seite, die geladen wird ODER das Titelattribut des Links, der auf diese Seite verweist (sie sind identisch). Ich denke, dass es mit der Tatsache zu tun hat, dass ich nur einen Abschnitt der Seite, deren Titel ich brauche, anrufe (d. H. Indem ich #content
zu load()
hinzufüge). Ich möchte trotzdem den Titel dieser Seite. Hier ist ein Testfall von dem, was ich bisher habe. (Nicht mehr verfügbar seit 28. Dezember 2013) jQuery-Datei:
$(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");
});
});
ich auch festgestellt, dass, wenn auf die Grundseite zurück (dh/sectionLoaderTest /) es für eine Weile leer wird und erst nach einer Weile Der Inhalt der ersten Seite wird geladen. Gibt es eine Möglichkeit, dies zu optimieren?
Zusätzlich verwende ich jQuery, um eine Active-Klasse zu dem Link hinzuzufügen, der angeklickt wurde. Wie kann ich sicherstellen, dass sich dies entsprechend der Historie ändert? Damit der richtige Link markiert wird, wenn ein Benutzer zurück navigiert?
So sind die drei Fragen sind:
- den Titel Arbeiten erhalten, sobald geht nach vorn und nach hinten
- Optimieren Sie die Ladezeit von der Startseite
- die aktive Klasse Fix, wenn sie vorwärts gehen und rückwärts
Alle helfen willkommen!
HINWEIS 1: Ich möchte auf history.js und meinem eigenen Skript aufbauen und als solches die Unterstützung für < HTML5
Browser beibehalten. Ich würde das bevorzugen, weil 1. Ich weiß, dass das funktionieren muss, da ist nur etwas, was schief läuft. 2. Es würde Zeit sparen, wenn ich eine Lösung sehen und sie in das Skript, das ich bereits geschrieben hätte, implementieren würde, anstatt ein ganz neues Skript zu entwickeln.
ANMERKUNG 2: Das Kopfgeld wird nur an denjenigen vergeben, der alle meine Fragen beantworten kann (3)!
Du hast immer noch nicht richtig, ein Beispiel eines solchen sehen hier http://stackoverflow.com/questions/6622449/why-is-history-pushstate-not-supported-in-ie-are-there-some -other-ways-to-ach/9470183 # 9470183 – devote
Ihr Kommentar ist nicht wirklich hilfreich. Ich muss (noch) nicht history.js implementieren, ich versuche nur zu verstehen, was pushState gerade macht. Ich möchte dieses Problem behoben haben. –
Mein Kommentar weist auf Ihren Fehler hin, wie Sie Methoden zur Verarbeitung des Ereignisses festlegen.Die Methode, den Ereignispopstate abzufangen, den Sie gepostet haben, ist nicht korrekt. Entfernen Sie ihn aus der Methode, wenn Sie darauf klicken. – devote