Workshop Internet-Präsenz

Übung JavaScript

Kommentar: Browser History: Vor und Zurück

Das Objekt history besitzt nur die Eigenschaft history.length und die Methoden history.back(), history.forward() und history.go(). Damit lässt sich keine vernünftige History-Verwaltung aufbauen. Nicht einmal die Position der aktuellen Seite in der Liste wird bekannt gemacht, nur deren Gesamtlänge der Liste.

Grund dafür sind nicht etwa technische Schwierigkeiten, sondern Sicherheitsaspekte. Es soll verhindert werden, dass eine Liste Ihrer besuchten Seiten an den Server weitergeleitet wird.

<script language="JavaScript" type="text/javascript">
<!--
alert(history.length);
//-->
</script>

Mit der ausschließlichen Kenntnis der Größe der Liste können Sie nicht einmal entscheiden, ob history.back() oder history.forward() noch mit einer sinnvollen Wirkung eingesetzt werden können, dass Sie also nicht schon an einem der beiden Listenenden angekommen sind.

Im Netscape 4.x (und nur hier) gibt es ein kleines Hintertürchen, man kann nämlich die zugehörige Sicherheitsoption abschalten (was übrigens kaum jemand weiß oder gar ahnt). Mit nachfolgendem Skript lassen sich alle besuchten Seiten auflisten:

<script language="JavaScript" type="text/javascript">
<!--

if (document.layers) {   // Test ob Netscape 4
   netscape.security.PrivilegeManager.enablePrivilege(
      'UniversalBrowserRead');
   var output = '';
   for (var i=0; i<window.history.length; i++) {
      output += window.history[i] + '\n'
   };
   alert(output);
}

//-->
</script>

Auf diese Weise kann man natärlich auch herausbekommen, an welcher Stelle der Liste man gegenwärtig ist oder sein könnte:

<script language="JavaScript" type="text/javascript">
<!--

if (document.layers) {    // Test ob Netscape 4
    netscape.security.PrivilegeManager.enablePrivilege(
       'UniversalBrowserRead');

    var found=false, first=count=-1;

    if (history[history.length-1] == window.location.href) {
        first = history.length-1;
        found = true;
        count = 1;
    };

    if (history.length>1) {
        for (var i=history.length-1; i>-1; i--) {
            if (history[i] == window.location.href) {
                if (!found) {
                   first = i;
                   found = true;
                   count = 1;
                }
                else count++;
            }
        }
    }
    alert('Anzahl Eintraege=' + history.length +
      ' erste Eintrag=' + first +
      ' gefundene Uebereinstimmungen=' + count);
}

//-->
</script>