Ah, der Zurück-Knopf. Sie können sich vorstellen, dass "zurück" ein JavaScript-Ereignis auslöst, das Sie einfach wie folgt abbrechen können:
document.onHistoryGo = function() { return false; }
Nein so. Es gibt einfach kein solches Ereignis.
Wenn Sie wirklich eine Web-App haben (im Gegensatz zu nur einer Website mit einigen Ajaxy-Funktionen), ist es sinnvoll, die Schaltfläche "Zurück" zu übernehmen (mit Fragmenten in der URL, wie Sie bereits erwähnt haben). Google Mail macht das. Ich spreche davon, wenn Ihre Web-App auf einer Seite in sich geschlossen ist.
Die Technik ist einfach: Wenn der Benutzer Maßnahmen ergreift, mit denen Änderungen vorgenommen werden, leiten Sie zu derselben URL weiter, auf der Sie sich bereits befinden, jedoch mit einem anderen Hash-Fragment. Z.B
window.location.hash = "#deleted_something";
...
window.location.hash = "#did_something_else";
Wenn der Gesamtstatus Ihrer Web-App hashbar ist, ist dies ein großartiger Ort, um einen Hash zu verwenden. Angenommen, Sie haben eine Liste mit E-Mails, verketten möglicherweise alle ihre IDs und lesen / ungelesenen Status und verwenden einen MD5-Hash, der als Fragmentkennung verwendet wird.
Diese Art der Umleitung (nur Hash) versucht nicht, etwas vom Server abzurufen, fügt jedoch einen Slot in die Verlaufsliste des Browsers ein. Im obigen Beispiel drückt der Benutzer auf "Zurück" und zeigt nun #deleted_something in der Adressleiste an. Sie schlagen wieder zurück und sind immer noch auf Ihrer Seite, aber ohne Hash. Dann wieder zurück und sie gehen tatsächlich zurück, wohin sie auch kommen.
Jetzt ist es jedoch schwierig, Ihr JavaScript erkennen zu lassen, wenn der Benutzer zurückschlägt (damit Sie den Status wiederherstellen können). Sie müssen lediglich die Position des Fensters beobachten und sehen, wann es sich ändert. Mit Abfrage. (Ich weiß, igitt, Umfrage. Nun, es gibt momentan nichts Besseres für einen Cross-Browser). Sie können jedoch nicht erkennen, ob sie vorwärts oder rückwärts gegangen sind, daher müssen Sie mit Ihren Hash-IDs kreativ werden. (Vielleicht ein mit einer Sequenznummer verketteter Hash ...)
Dies ist der Kern des Codes. (So funktioniert auch das jQuery History-Plugin.)
var hash = window.location.hash;
setInterval(function(){
if (window.location.hash != hash) {
hash = window.location.hash;
alert("User went back or forward to application state represented by " + hash);
}
}, 100);