Fenster binden POPSTATE
Angesichts der folgenden:
$(window).bind("popstate", function() {
alert('popstate');
});
Beim ersten laden, der Alarm wird ausgelöst, mit FireFox und Chrome, aber nicht mit Safari. Warum ist das so? Jemand anderes gesehen und know-how, um die beste Lösung für dieses?
Dank
InformationsquelleAutor der Frage AnApprentice | 2011-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die situation ist jetzt Umgekehrt. Chrome ist der Fehler behoben und jetzt feuert popstate auf die Seite laden aber Firefox 4 (seit RC) entfernt hat, von der Spezifikation und jetzt nicht Feuer popstate!
UPDATE: Die HTML5-Spezifikation wurde geändert in 2011 zu Staat popstate sollte nicht ausgelöst wird, die beim laden der Seite. Sowohl Firefox und Chrome jetzt das richtige zu tun, wie der Firefox 4 und Chrome 34.
InformationsquelleAutor der Antwort Tamlyn
Sehen Sie den code aus pjax. pjax ist ziemlich populären open-source-Bibliothek, die jetzt, so das unten-Logik vielleicht das beste, um dieses Problem zu vermeiden.
https://github.com/defunkt/jquery-pjax/blob/master/jquery.pjax.js
InformationsquelleAutor der Antwort Nobu
In webkit die popstate-event ausgelöst wird, die beim laden der Seite. Um dies zu vermeiden, ist diese leicht umgehen funktioniert bei mir:
Jedes mal, wenn ich Feuer
history.push(...)
füge ich dieclass
historypushed derbody
-tag:Wenn ich trigger das popstate-event, ob ich für diese Klasse:
InformationsquelleAutor der Antwort lohsie
Einen einfachen Weg, um dieses Problem zu vermeiden ist, um das erste argument auf pushState auf true überprüfen Sie dann gegen onpopstate. Ähnlich wie die pjax Beispiel, aber ein bisschen einfacher. Das Beispiel weiter unten ausgeführt wird doSomething() für jeden popstate-event mit Ausnahme der ersten Seite zu laden.
InformationsquelleAutor der Antwort HuffMoody
Es wurde ein Fehler in Webkit, die falsch implementiert das "popstate" Ereignis. Schauen Sie sich diese einfachen post, der erklärt, das problem (kühl, wenig show and tell): http://www.bcherry.net/playground/pushstate
Mein Vorschlag wäre die Umsetzung Ihrer eigenen "popstate" event tracker für Safari. So etwas wie dieses:
Sie wickeln konnte, dass die Anweisung in einem browser testen, um zu überprüfen, für safari. Noch besser finden, wenn "popstate" wurde ausgelöst durch die Zeit, die das DOM bereit ist, und wenden Sie dann die innere Funktion zum ersetzen der Umsetzung. Die eine Sache, die Sie nicht wollen, zu geschehen, ist zwei popstate Ereignisse ausgelöst werden (duplizieren der event-handler-Logik, großartige Möglichkeit, um sperren der Benutzeroberfläche).
InformationsquelleAutor der Antwort Shakakai
Dies ist mein workaround.
InformationsquelleAutor der Antwort Baggz
Diese Antwort auf eine ähnliche Frage schlägt vor, zu prüfen, boolean Wahrheit
event.state
impopstate
event-handler:Können Sie auch binden Sie Ihre callback-Funktion, die
popstate
Veranstaltung wie dieser:Überprüfen hier für weitere Informationen über diese Lösung
InformationsquelleAutor der Antwort Wilt