Wenn ich in Firefox die Schaltfläche "Zurück" verwende, um zu einer zuvor besuchten Seite zu gelangen, werden die Skripts auf dieser Seite nicht erneut ausgeführt.
Das ist richtig und das ist gut so.
Wenn Sie in Firefox (und Safari und Opera) auf einen Link klicken, wird Ihre Seite nicht sofort zerstört, um zur nächsten zu gelangen. Es hält die Seite intakt und verbirgt sie lediglich vor der Ansicht. Wenn Sie auf die Schaltfläche "Zurück" klicken, wird die alte Seite wieder angezeigt, ohne dass das Dokument erneut geladen werden muss. Dies ist viel schneller, was zu reibungsloseren Seitenübergängen für den Benutzer führt.
Diese Funktion wird als bfcache bezeichnet .
Alle Inhalte, die Sie der Seite beim vorherigen Laden und Verwenden des Benutzers hinzugefügt haben, sind weiterhin vorhanden. Alle Ereignishandler, die Sie an Seitenelemente angehängt haben, werden weiterhin angehängt. Alle von Ihnen festgelegten Zeitüberschreitungen / Intervalle sind weiterhin aktiv. Es gibt also selten einen Grund, warum Sie wissen müssen, dass Sie versteckt und erneut gezeigt wurden. Es wäre falsch, onload
Skriptcode erneut aufzurufen oder einzubinden, da jede Bindung und Inhaltsgenerierung, die Sie in dieser Funktion durchgeführt haben, ein zweites Mal über denselben Inhalt ausgeführt wird, was möglicherweise katastrophale Folgen hat. (zB document.write
in Inline-Skript würde die Seite völlig zerstören.)
Der Grund, warum das Schreiben in window.onunload
einen Effekt hat, ist, dass die Browser, die bfcache implementieren, entschieden haben, dass - aus Gründen der Kompatibilität mit Seiten, die wirklich wissen müssen, wann sie verworfen werden - jede Seite, die Interesse daran hat, zu wissen, wann sie onunload
auftritt, den bfcache dazu veranlasst deaktiviert sein. Diese Seite wird frisch geladen, wenn Sie zurückkehren, anstatt aus dem bfcache abgerufen zu werden.
Wenn Sie also festlegen window.onunload= function() {};
, brechen Sie den bfcache absichtlich ab. Dies führt dazu, dass Ihre Seiten nur langsam navigieren und nur als letztes Mittel verwendet werden sollten.
Wenn Sie wissen müssen, wann der Benutzer Ihre Seite verlässt oder zurückkehrt, ohne den bfcache durcheinander zu bringen, können Sie stattdessen die Ereignisse onpageshow
und abfangen onpagehide
:
window.onload=window.onpageshow= function() {
alert('Hello!');
};