leoooo: Abfragen ob der Back-Button gedrückt wurde

hallo,

ich habe eine Seite die mit Ankerlinks arbeitet.

also, man kann ja einen Ankerlink anklicken, dann ändert sich der Browserhash und und das Fenster Scrollt zu dem verlinkten Element. Dann kann man z.B. auf einen zweiten Ankerlink klicken, der Hash ändert sich abermals, die Seite Spring wieder zum gewünschten Punkt.

wenn ich jetzt den Back-Button des Browsers klicke, springt er zurück zur Position des ersten Elementes und der Hash springt zurück.

jetzt möchte ich im IE mit js abfragen ob der Back-Button gedrückt wurde und zum beispiel einen Alert ausgeben.

geht das?
lg
leooooo

  1. Hallo,

    geht das?

    so weit ich weis geht das ni ...
    aba ich bin ni der beste in JS ... mal sehn waas die anderen sagen...

    MfG. Christoph

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
    Go to this
    1. so weit ich weis geht das ni ...
      aba ich bin ni der beste in JS ... mal sehn waas die anderen sagen...

      Es gibt keinen BrowserBack-Button, Dessen Zustand man abfragen könnte.
      was man hingegen kann, ist den zustand der history abfragen, dachdem eine vermutete Browserback Aktion stattfand. Ist die aktuelle Seite nicht die letzte Seite in der History, so fand ein Browser back (irgend wann) statt.

      Stichwort history Objekt.

      mfg Beat

      --
      Woran ich arbeite:
      X-Torah
      ><o(((°>      ><o(((°>
         <°)))o><                      ><o(((°>o
      1. Es gibt keinen BrowserBack-Button, Dessen Zustand man abfragen könnte.
        was man hingegen kann, ist den zustand der history abfragen, dachdem eine vermutete Browserback Aktion stattfand. Ist die aktuelle Seite nicht die letzte Seite in der History, so fand ein Browser back (irgend wann) statt.

        also brauche ich eine Funktion welche ununterbrochen den Hash-Wert mit der History vergleicht. richtig? wie geht sowas?

      2. Stichwort history Objekt.

        das Problem ist, ich kann mir den Inhalt des History Objektes nicht einmal ausgeben lassen.

        also:
        alert(window.history.length);
        gibt mir die anzahl der besuchten seiten zurück aber
        alert(window.history.length)
        gibt nichts zurück. Firebug meint: "Die Erlaubnis für den Aufruf der Methode History.item wurde verweigert"

        imo sogar vernünftig.

        aber was mache ich da?

      3. hab noch mal etwas recherchiert und festgestellt, das es nicht möglich ist. ich kann zwar mit window.history.length wunderbar feststellen wie viele seiten bereits in der History stehen. Leider aber nicht an welcher stelle ich mich in dieser History befinde. also, wie viele seiten davon hinter mir und vor mir liegen.

        darum kann ich auch nicht herausfinden ob der Button geklickt wurde oder nicht :(

        schade.

        gute Nacht da Draußen...

        1. Hi,

          hab noch mal etwas recherchiert und festgestellt, das es nicht möglich ist. ich kann zwar mit window.history.length wunderbar feststellen wie viele seiten bereits in der History stehen. Leider aber nicht an welcher stelle ich mich in dieser History befinde.

          Noe, das geht dich ja auch wenig an.

          darum kann ich auch nicht herausfinden ob der Button geklickt wurde oder nicht :(

          Dich interessiert die Aenderung der aktuellen Anker-Position in deiner Seite - also frage diese ab, und stelle fest, ob sie sich geaendert hat - location.hash.

          MfG ChrisB

          --
          "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
          1. Dich interessiert die Aenderung der aktuellen Anker-Position in deiner Seite - also frage diese ab, und stelle fest, ob sie sich geaendert hat - location.hash.

            ah, ja stimmt. habe mal folgendesscript gebaut

              
              
            var aktive = window.setInterval("checkhash()", 1);  
              
            function checkhash () {  
              
             if(typeof(oldhash) == "undefined"){  
             var oldhash = window.location.hash ;  
             }  
              
             if(window.location.hash != oldhash){  
              alert("hash has changed from " + oldhash + " to " + window.location.hash);  
              oldhash == window.location.hash;  
             }  
            }  
              
            
            

            warum funktioniert das nicht?

            1. Hallo,

              var aktive = window.setInterval("checkhash()", 1);

              LOL. Es reicht völlig, wenn du den Intervall auf 500ms oder gar 1000ms stellst. Auf diese Weise belastest du nur den Browser, verquast unnötig Rechenzeit und sorgst dafür, dass andere Scripte im Dokument ggf. verzögert ausgeführt wird. Im Übrigen ist alles unter 10ms ohnehin Humbug.

              function checkhash () {

              if(typeof(oldhash) == "undefined"){
              var oldhash = window.location.hash ;
              }

              Hier legst du eine lokale Variable an. Du musst die Variable schon ohne "var" notieren, sodass sie eine globale wird, sprich, eine Eigenschaft von window.

              warum funktioniert das nicht?

              http://de.selfhtml.org/javascript/sprache/variablen.htm#definieren

              Mathias

              1. Hier legst du eine lokale Variable an. Du musst die Variable schon ohne "var" notieren, sodass sie eine globale wird, sprich, eine Eigenschaft von window.

                warum funktioniert das nicht?

                http://de.selfhtml.org/javascript/sprache/variablen.htm#definieren

                Mathias

                sehr gut. danke das jetzte script registriert sowohl den klick auf einen ankerlink als auch auf den back button, als auch auch auf die manuelle eingabe eines links in die adresszeile.

                  
                  
                var aktive = window.setInterval("checkhash()", 100);  
                  
                function checkhash () {  
                  
                 if(typeof(oldhash) == "undefined"){  
                 oldhash = window.location.hash;  
                 }  
                  
                 if(window.location.hash != oldhash){  
                  alert("hash has changed from " + oldhash + " to " + window.location.hash);  
                  oldhash == window.location.hash;  
                  
                 }  
                }  
                  
                
                

                das ganze funktioniert leider nur einmal weil ich danach mit immer dem selben alert zu gebombt werde. das sollte doch aber gar nicht passieren, da ich nach dem alert dem oldhash auf window.location.hash setzte. also müsste doch beim nächsten durchlauf die Bedingung "window.location.hash != oldhash"n gar nicht mehr zu treffen.

                1. hab schon, das Problem war das doppelte =

                  das ganze funktioniert leider nicht im ie7 wat nu?