Winfried Kaiser: Browser-Event bei Forward und Backward Browsing

Ich experimentiere derzeit mit AJAX (am konkreten Beispiel des "xtCommerce" Shop-Systems), und komme dabei auch sehr gut voran.

(AJAX gibt ein ganz neues Einkaufserlebnis, da der dauernde Neuaufbau der Seiten bei jeder Operation entfällt, und nur noch die wirklich zu ändernden Bereiche ausgetauscht werden. (So nebenbei ist da auch noch ein "sticky-cart" (ein auch beim scrollen sichtbarer Warenkorb) mit abgefallen.) Wen es interessiert: http://www.seifenparadies.de/ajax_test . (IE verwenden, mit Firefox gibt es auf dem online-Server noch ein paar Problemchen, lokal funktioniert das auch schon.)

Mit AJAX hat man nun aber das grundsätzliche Problem, dass die Browser "Zurück"- und "Vorwärts"-Buttons nicht mehr das gewünschte Ergebnis zeigen, da das AJAX-Konzept ja davon lebt, dass man an den normalen Browser-Mechanismen vorbei Elemente einer Seite dynamisch selbst lädt. Die Browser-Historie bekommt davon gar nichts mit.

Ich habe mir nun ein Konzept entwickelt, wie ich die Browsing-Historie auf Anwendungs-Ebene mitführen, und Im AJAX-Support-Script die Historie dann selbst abarbeiten könnte.

Notwendige Voraussetzung dafür wäre aber, dass ich bein Klick auf "Zurück" und "Vorwärts" ein Event bekomme, damit ich mein Historie im Javascript bearbeiten kann.

Ich habe aber bisher im Internet nichts derartiges gefunden!

Hat jemand eine Idee, wie man dieses Problem lösen könnte?

Alternativ wäre es auch eine Lösung, wenn man die Browser "Zurück" und "Vorwärts"-Buttons (und den "Zurück"-Menüeintrag) deaktivieren könnte, und stattdessen eigene Buttons dafür anbietet. Geht das??

  1. Hi,

    Hat jemand eine Idee, wie man dieses Problem lösen könnte?

    da bleiben afaik eigentlich nur onload und onunload, mit denen Du ggf. Stati abrufen oder setzen koenntest. Leider fuehrt IE teilweise keinen onload per Backbutton aus, manchmal hilft hier das vorhergehende Veraendern einer Variablen per onunload.

    Alternativ wäre es auch eine Lösung, wenn man die Browser "Zurück" und "Vorwärts"-Buttons

    no way.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  2. Hallo,

    Mit AJAX hat man nun aber das grundsätzliche Problem, dass die Browser "Zurück"- und "Vorwärts"-Buttons nicht mehr das gewünschte Ergebnis zeigen, da das AJAX-Konzept ja davon lebt, dass man an den normalen Browser-Mechanismen vorbei Elemente einer Seite dynamisch selbst lädt. Die Browser-Historie bekommt davon gar nichts mit.

    Ich habe mir nun ein Konzept entwickelt, wie ich die Browsing-Historie auf Anwendungs-Ebene mitführen, und Im AJAX-Support-Script die Historie dann selbst abarbeiten könnte.

    Findest du das nicht etwas absurd? Der Browser stellt eine wichtige Funktionalität zur Verfügung, durch eine vermeintliche Verbesserung der Seite hebelst du sie aus, um sie dann wieder neu zu implementieren, nur sie funktioniert nicht gleichermaßen. Solche Geschichten liest man hier jeden Tag, zumeist gibt es keinen Ausweg, wenn man erst einmal diesen Weg eingeschlagen hat.

    Notwendige Voraussetzung dafür wäre aber, dass ich bein Klick auf "Zurück" und "Vorwärts" ein Event bekomme, damit ich mein Historie im Javascript bearbeiten kann.

    Einen solchen Event gibt es nicht.
    Ich sehe auch nicht, inwiefern dir das genannte onunload weiterhelfen soll - damit kannst du zwar feststellen, wenn sich die Seite ändert, aber dies verhindern und stattdessen deine JavaScript-Logik zwischenschalten, das geht nicht.
    onbeforeunload gäbe es noch, wäre aber auch für deine Zwecke das absolute Gegenteil von benutzerfreundlich.

    Hat jemand eine Idee, wie man dieses Problem lösen könnte?

    Du manövrierst dich mit Ajax in Probleme, die du ohne überhaupt nicht hättest. Meinst du wirklich, dass diese Ajaxifizierung einen überzeugenden Mehrwert bietet?

    Es gäbe Methoden, mit denen du dem Browser bei einer Änderung einen Seitenwechsel vorgaukeln könntest, z.B. durch die Änderung der URL (speziell des Ankers, sodass sich die Seite nicht wirklich ändern muss) eines versteckten iframes. Sobald sich darin durch die Zurück- oder Vorwärts-Funktion die URL ändert, könntest du den entsprechenden Status der Seite wiederherstellen. Allerdings wäre das absoluter Overkill

    Alternativ wäre es auch eine Lösung, wenn man die Browser "Zurück" und "Vorwärts"-Buttons (und den "Zurück"-Menüeintrag) deaktivieren könnte, und stattdessen eigene Buttons dafür anbietet. Geht das??

    Selbstverständlich nicht.

    Deine Beispielseite funktioniert übrigens bei mir nicht, nach einem Klick auf einen Link tut sich außer einem JavaScript-Fehler nichts.

    Mathias