JavaScript - bfcache/pageshow-event - Veranstaltung.beharrte immer auf false gesetzt?
In einem standard-Java /SpringMVC /JSP /jQuery, web-app, die ich versuche zu erkennen, eine "Zurück" (oder Geschichte.go(-1)) - Ereignis, um die Aktualisierung (AJAX) Zusammenfassung Komponente/panel-Inhalte, wenn ich wieder auf eine Seite (wo wir uns ändern können die backend-Daten, angezeigt durch das summary-Komponente).
Habe ich versucht, das folgende in JavaScript (folgenden einige Beiträge auf StackExchange re, wie Sie diese erreichen):
<script type="text/javascript">
$(document).ready(function() {
window.onpageshow = function(event) {
console.log("Event:");
console.dir(event);
if (event.persisted) {
alert("non-jQuery - back to page - loaded from bfcache");
} else {
alert("non-jQuery - loaded page from server");
}
};
$(window).on("pageshow", function(event){
console.log("Event:");
console.dir(event);
if (event.originalEvent.persisted) {
alert("jquery - back to page - loaded from bfcache");
} else {
alert("jquery - loaded page from server");
}
});
});
</script>
Ich bin mit OpenSUSE Linux und haben versucht, dies mit FireFox und Chrome (aktuelle Versionen), aber zu jeder Zeit der Veranstaltung persisted
Attribut false
(ich kann das sehen in der JavaScript-Konsole und durch die Warnungen, die pop-up aus dem obigen code). Durch jedes mal, ich meine, unabhängig davon, ob es geladen wurde vom server angezeigt oder wieder über den Back-button (oder ein 'Zurück' - link).
Meine intention war es, ein AJAX-Aufruf Neuladen der Zusammenfassung Komponente/panel mit den zu aktualisierenden Daten vom server, wenn die Seite wurde, welche über den Back-button oder history.go(-1)
nennen.
Ich habe auch versucht die Einstellung eine unload-handler (das macht nichts) zu verhindern, dass die Seite nicht in die bfcache aber es scheint immer noch zu zeigen, dass ein bf-Cache-version und die event.persisted
(oder event.originalEvent.persisted
)false
.
Ist diese Eigenschaft verwaltet das richtig unter Linux? Mache ich etwas dumm in meinem code? Jede Hilfe oder Ideen würde sehr geschätzt, danke!
Cache-Control: no-cache, must-revalidate, max-age=0
). Der Browser eigentlich nie die Seite neu laden (über Wireshark überprüft), und event.beibehalten ist immer falsch.InformationsquelleAutor Eoin | 2013-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies scheint ein bug in Chrome (auch vorhanden in IE11).
Habe ich folgenden workaround:
Dieser nutzt die Tatsache, dass in den meisten Browsern, wenn die Seite vom cache geladen wird, bilden Felder, die Werte sind auch konserviert.
ja, ich habe tatsächlich behoben diejenigen, die mit der Geschichte.popstate Lösung, vielen Dank
InformationsquelleAutor Grégoire Clermont
Habe ich gefunden hidden-input-buttons sind keine zuverlässige Lösung, da Sie möglicherweise der falsche Wert, wenn der Benutzer zurück navigiert Sie zu der Seite und trifft dann auf aktualisieren. Einige Browser (Firefox) behalten Eingabewerte auf aktualisieren, so dass jedes mal, wenn der Nutzer es aktualisieren aktualisieren wieder da die Eingabe-Taste hält den falschen Wert. Dies ist ein typisches Szenario für Foren (Benutzer ein Thema, trifft auf die zurück-Taste, um zurück zu der Liste der Themen, und kann weiterhin auf aktualisieren, um zu überprüfen, ob es neue Themen).
Wie bereits von Grégoire Clermont,
event.persisted
ist buggy in chrome (und IE) und dieses ist immer noch nicht behoben wurde, für entweder browser ab Feb 2017. Die gute Nachricht ist, können Sie sich aufwindow.performance.navigation.type == 2
für chrome und IE. Ironischerweise Firefox ist unzuverlässig für letzteres, aber es sollte keine Rolle, da ist es zuverlässig fürevent.persisted
. Der folgende code funktionierte für mich:InformationsquelleAutor Tom Davenport
Ich weiß, das ist ein bisschen spät, aber das funktioniert für mich:
Ich glaube nicht, müssen Sie es in das Dokument ready-Funktion, verwenden Sie einfach Vanille als oben.
Ich glaube nicht, dass das funktioniert auf Chrome fyi.
InformationsquelleAutor Chez