Wro: Display-Wechsel nach Zurück-Button des Browsers

Hallo zusammen,

ich habe in einem Menü für eine Seite ein kleines Javascript integriert, welches den Display-Status verschiedener DIVs von "none" auf "block" ändert.
Standardmäßig sind die DIVs also auf "none", beim mousover auf "block" und bei mouseout wieder "none".

Das Script sieht so aus:

<script type="text/javascript">
<!--
function swap(id) {
          var obj = document.getElementById(id);
          obj.style.display = (obj.style.display == 'none') ? 'block' : 'none';
  }
//-->
</script>

Das funzt auch alles wunderbar.

Wenn ich nun aber innerhalb einer dieser DIVs einen Menüpunkt auswähle und auf die nächste Seite gelange. Von dort dann wieder über den Zurück-Button des Browsers auf die Ursprungsseite springe, ist dort der zuvor ausgewählte DIV wieder eingeblendet, weil er offensichtlich keinen Display-Wechsel über mouseout bekommen hat.
Die Funkion ist dann also umgedreht, der DIV wird angezeigt und bei mouseover ausgeblendet.

Hat jemand eine Idee, wie ich den DIV nach klick auf den Zurück-Button wieder ausgeblendet kriege? Mit onload kann ich ja nicht arbeiten, weil die Seite nicht neu geladen wird!?!

Gibt es evt ne Javascript-Abfrage nach dem Motto: if javascript.back genutzt, dann div auf display:none?

Ich hoffe mein Problem ist einigermaßen deutlich geworden und ich bedanke mich schonmal jetzt für die zahlreichen Antworten ;-)

Der Wro

  1. Hi!

    Du kannst nur das onunload-Event verwenden und darauf hoffen, dass der Browser es bearbeitet (Opera 9.26 macht das bspw. nicht).

    Gruß, LX

    --
    RFC 1925, Satz 8: Es ist komplizierter als man denkt.
    1. Vielen Dank,

      just in diesem Moment bin ich auf die selbe Idee gekommen.
      Hab vorher den Wald vor lauter Bäumen nicht gesehen.

      Ich werd`s so machen, weil das Augenmerk auf Opera nicht sooooo groß ist ;-)

    2. Hi!

      Du kannst nur das onunload-Event verwenden und darauf hoffen, dass der Browser es bearbeitet (Opera 9.26 macht das bspw. nicht).

      Gruß, LX

      Ich hab doch noch ne kurze Rückfrage.

      Gehe ich Recht in der Annahme, dass der Befehl [onunload="swap('blablabla')"] in den Body-Tag der Seite muss?

      Bitte sag nein!
      Sonst hab ich nämlich heute extrem viel Fleißarbeit vor mir ;-)

      Der Wro

      1. Es ist nicht unbedingt ratsam, globale JS-Geschichten nicht in eine externe JS-Datei zu kapseln (Caching ist hilfreich). Darin würdest Du dann schreiben:

        document.getElementsByTagName('body')[0].onunload = function() {  
           ...  
        }
        

        Wenn Du ganz sauber arbeiten willst, kannst Du das Event noch in eine Closure kapseln, um sonstige unload-Events nicht zu überschreiben.

        Gruß, LX

        --
        RFC 1925, Satz 8: Es ist komplizierter als man denkt.
        1. Es ist nicht unbedingt ratsam, globale JS-Geschichten nicht in eine externe JS-Datei zu kapseln (Caching ist hilfreich). Darin würdest Du dann schreiben:

          document.getElementsByTagName('body')[0].onunload = function() {

          ...
          }

            
          Zugriff auf das body-Element erhält man einfacher über document.body, aber ein solcher Zugriff ist nicht nötig - und nicht direkt in einem externen Script möglich, das im head eingebunden wird. Das unload-Ereignis lässt sich, wie auch das load-Ereignis, am window-Objekt überwachen. Im Gegensatz zu window.onunload funktioniert das Setzen eines Handlers beim body-Element per JavaScript nicht browserübergreifend: Im Firefox und Safari/Chrome ginge höchstens document.body.setAttribute("onunload", "...").  
            
          Mathias
          
          -- 
          [JavaScript-Erweiterung für das SELFHTML-Forum](http://molily.de/selfhtml-forum-js/)
          
      2. Gehe ich Recht in der Annahme, dass der Befehl [onunload="swap('blablabla')"] in den Body-Tag der Seite muss?

        Event-Handler kannst du zentral über JavaScript registrieren und musst sie nicht im HTML notieren. Das gilt so ziemlich für alle Events.

        window.onunload = function () {  
           swap("blablabla");  
        };
        

        Mathias

        1. Hallo.

          Event-Handler kannst du zentral über JavaScript registrieren und musst sie nicht im HTML notieren. Das gilt so ziemlich für alle Events.

          Interessehalber: Für welche denn nicht und wesalb für diese nicht?
          MfG, at

          1. Hallo!

            Event-Handler kannst du zentral über JavaScript registrieren und musst sie nicht im HTML notieren. Das gilt so ziemlich für alle Events.

            Interessehalber: Für welche denn nicht und wesalb für diese nicht?

            Mir ist keiner eingefallen, aber allwissend bin ich nicht, deswegen wollte ich es nicht ausschließen.
            Alle Events, für die man Event-Handler im HTML notieren kann, kann man m.W. auch direkt über JavaScript überwachen. Dann gibts eine Reihe, die man m.W. nur per JavaScript überwachen kann, z.B. die DOM-Mutation-Events. Ein Event, für den man einen Handler prinzipiell nur in HTML notieren kann, kenne ich wie gesagt nicht. Es kann höchstens sein, dass manche Events eintreten, bevor sie mit JS überwacht werden können. Beispielsweise:

            <iframe src="..." id="foo"></iframe>
            <script type="text/javascript>
            document.getElementById("foo").onload = function () { ... };
            </script>

            Ich weiß nicht, ob hier garantiert ist, dass das Script auf jeden Fall vor dem load-Event ausgeführt wird. Festgelegt ist so etwas höchstens beim HTML-5-Parsing (ich habe aber noch nicht nachgeschaut).

            Mathias

            1. Hallo.

              Mir ist keiner eingefallen, aber allwissend bin ich nicht, deswegen wollte ich es nicht ausschließen.

              Ah, ich verstehe. Das erklärt auch, weshalb meine kurze Suche keine brauchbaren Ergebnisse brachte.

              <iframe src="..." id="foo"></iframe>
              <script type="text/javascript>
              document.getElementById("foo").onload = function () { ... };
              </script>

              Ich weiß nicht, ob hier garantiert ist, dass das Script auf jeden Fall vor dem load-Event ausgeführt wird. Festgelegt ist so etwas höchstens beim HTML-5-Parsing (ich habe aber noch nicht nachgeschaut).

              Danke für die Erläuterung. An so etwas hatte ich gar nicht gedacht. Bislang betrifft es mich zwar nicht, aber ich werde es im Hinterkopf behalten.
              MfG, at