HTML 5-Geschichte - Fenster.pushState nicht funktioniert
Ich versuche zu ajax laden die center-Inhalte und aktualisieren Sie die URL ohne das ändern der Seite. Dies alles funktioniert gut, außer, bis ich versuche, auf die Geschichte. Es scheint, Fenster.pushState ist nicht die Aufnahme meiner URL ' s richtig oder popstate-event nicht richtig funktioniert. Ich kann erfolgreich ajax laden der letzten Seite, aber wenn ich drücken Sie die zurück mehr als einmal, bleibt es auf der gleichen Seite. Jede Hilfe wäre sehr geschätzt werden!
$(document).ready(function() {
$('area, .ajax_link').live('click', function(event) {
change_image(this, event);
});
window.addEventListener('popstate', function(event) {
change_image(window.location, event);
});
});
function change_image(e, event) {
if($(e).attr('target') != '_blank') {
event.preventDefault();
$.post(
base_url+'/kit/ajax_load',
{ url: this_url},
function(return_data) {
$('#content img').attr('src', return_data.image_src);
$('map').html(return_data.imagemap);
},
'json'
);
history.pushState(null, null, this_url);
update_links(this_url);
}
}
- Gibt es einen bestimmten browser, die Sie sehen, dieses Verhalten, oder ist es das gleiche in allen Browsern, die Sie versucht haben, die Unterstützung pushState?
- Getestet auf Chrome und Firefox, Gleiches Verhalten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem Gelöst
@Oliver Nachtigall: ich musste aus Verlauf entfernen.pushState von meinem change_image Funktion. Sie können nicht Geschichte nennen.pushState während einer onpopstate. Hier ist die gesamte Arbeits-code. Ich verkürzte es oben nur die notwendigen Teile in Frage. Ich werde das hinzufügen einige fallbacks weiter. Dies ist getestet und funktioniert in Chrome & Firefox. Getestet und funktioniert nicht im IE.
Ist das wichtigste Organ der change_image Funktion geschieht onpopstate? Wenn so wie es aussieht werden Sie drängen, einen neuen Staat jedes mal, wenn Sie pop zu einem Zustand, könnte dies verursacht einige Probleme.
Wenn Sie mit pushState für das routing, die Sie könnten versuchen, mit einer Bibliothek wie Davis Dinge einfacher machen.
Wie ist
$(e).attr('target') != '_blank'
wenne
istwindow.location
?Als Sie mit den nativen HTML5-History-API, benötigen Sie außerdem ein Häkchen vor
history.pushState(null, null, this_url);
nur aufrufen, so, wenn wir von einem link.Plus
window.addEventListener('popstate', function(event) {
die variableevent
hier ist eigentlich der Staat die Daten.Finden Sie in der folgenden Gist für die Arbeit Beispiele: