2009-06-11 6 views
11

Ist es möglich zu überprüfen, ob es einen Wert für history.go (-1) gibt? Ich weiß, dass Sie nicht direkt auf die Geschichte zugreifen können.Seitenverlauf - Zurück-Button existiert?

Ich versuche, von document.referrer fern zu bleiben, weil ich weiß, dass es in einigen Fällen blockiert werden kann.

Hier ist was ich versuche zu tun. Ich habe eine Fehlerseite, auf dieser Seite möchte ich entweder eine ZURÜCK-Schaltfläche (wenn es nicht das einzige Element in der Geschichte ist) oder eine Schließen-Schaltfläche (wenn es ist).

+0

Mögliches Duplikat von [Wie überprüft man, ob der Benutzer in die Browserhistorie zurückkehren kann oder nicht] (http://stackoverflow.com/questions/3588315/how-to-check-if-the-user-can-go -Back-in-Browser-Geschichte-oder-nicht) – bummi

Antwort

18
if (history.length) { 
    //There is history to go back to 
    history.go(-1); 
}  
+0

Ha, duh! Manchmal ist es die einfachste Antwort. –

+3

Gibt es eine Möglichkeit zu überprüfen, ob der Vorwärts-Button existiert? – Mischa

+0

überprüft dies, ob die vorherige Seite "about: newtab" war oder nicht;) –

2

Wenn der Verlauf eine Länge größer als 0 hat, enthält er mindestens einen Verlaufspunkt.

if (history.length) 
+0

yeah und dieser Geschichte Punkt könnte 'über sein: Newtab' zu Recht? –

10

Eigentlich history.length ist immer ein oder mehr, da die aktuelle Seite zählt. Wenn Sie eine Weiterleitungshistorie haben (d. H. Sie haben die Zurück-Schaltfläche verwendet), zählen auch diese Seiten. So haben Sie einen komplizierteren Scheck benötigen:

if((1 < history.length) && document.referrer) { 
+1

Gibt es eine Möglichkeit zu überprüfen, ob der Vorwärts-Button existiert? – Mischa

+1

Referrer wird übergeben, wenn der Link "target =" _ blank "" angeklickt wird und Sie nicht "back" in einem neuen Tab ausführen können. Diese Lösung ist also nicht perfekt. – Finesse

-1
function test() { 
     document.URL = document.referrer;    
    } 
2

Es gibt keinen Cross-Browser-Ansatz, dies zu erreichen. Document.Referrer kann auch gesetzt werden, wenn kein History-Eintrag existiert.

Ich kam mit dem folgenden "Hack". Es verwendet das onbeforeunload-Ereignis, um zu erkennen, ob der Browser die Seite verlässt oder nicht. Wenn es nicht in einer bestimmten Zeitspanne passiert, wird es nur zum Fallback umleiten.

window.goBack = function goBack(fallback){ 
    var useFallback = true; 
    window.onbeforeunload = function(){ 
    useFallback = false; 
    } 
    window.history.back(); 

    setTimeout(function(){ 
    if (useFallback){ window.location.href = fallback; } 
    }, 100); 
} 

können Sie diese Funktion aufrufen goBack("fallback.example.org") verwenden. Ein Anwendungsfall ist, dass Sie eine beliebige Seite mit einer Zurück-Schaltfläche versehen möchten und sicherstellen möchten, dass diese Zurück-Schaltfläche auch dann funktioniert, wenn der Benutzer direkt auf diese Seite zugreift (z. B. durch Lesezeichen, Direktverknüpfung usw.)).

Also entweder führt es eine history.back() oder wenn es keinen Eintrag gibt, wird es zu einem Fallback umleiten.