Wie erhalte ich die vorherige URL in JavaScript?

230

Gibt es eine Möglichkeit, die vorherige URL in JavaScript abzurufen? Etwas wie das:

alert("previous url is: " + window.history.previous.href);

Gibt es so etwas? Oder sollte ich es einfach in einem Cookie speichern? Ich muss es nur wissen, damit ich ohne Anker und so weiter Übergänge von der vorherigen URL zur aktuellen URL durchführen kann.

Lance Pollard
quelle

Antworten:

350
document.referrer

In vielen Fällen erhalten Sie die URL der letzten Seite, die der Benutzer besucht hat, wenn er durch Klicken auf einen Link zur aktuellen Seite gelangt ist (anstatt direkt in die Adressleiste zu tippen, oder ich glaube in einigen Fällen durch Senden eines Formulars?). Spezifiziert durch DOM Level 2 . Mehr hier.

window.historyErmöglicht aus Sicherheits- und Datenschutzgründen die Navigation, jedoch nicht den Zugriff auf URLs in der Sitzung. Wenn ein detaillierterer URL-Verlauf verfügbar wäre, könnten auf jeder von Ihnen besuchten Website alle anderen Websites angezeigt werden, auf denen Sie gewesen sind.

Wenn Sie mit Statusverschiebungen auf Ihrer eigenen Site zu tun haben, ist es möglicherweise weniger fragil und sicherlich nützlicher, eine der normalen Sitzungsverwaltungstechniken zu verwenden: Cookie-Daten, URL-Parameter oder serverseitige Sitzungsinformationen.

Ben Zotto
quelle
4
Es gibt auch document.referrer, wenn Sie über einen Link zur aktuellen Seite gelangt sind (jedoch nicht beispielsweise durch Lesezeichen oder Eingabe in die Adressleiste).
Hellion
68
Am Ende habe ich die vorherige URL in Cookies für die Website gespeichert, was document.referrernicht immer funktioniert. $.cookie("previousUrl", window.location.href, {path:"/"});.
Lance Pollard
4
Sie, mein Herr, haben mich vor einer Welt voller JavaScript-Schmerzen gerettet!
Anna Lam
8
vorherige ist nicht Referrer. verwirren Sie sie nicht
Green
1
document.referrer speichert keine Hashes von der letzten URL ... es bezieht sich nur auf die letzte URL.
Nmaster88
29

Wenn Sie zur vorherigen Seite wechseln möchten, ohne die URL zu kennen, können Sie die neue Verlaufs-API verwenden.

history.back(); //Go to the previous page
history.forward(); //Go to the next page in the stack
history.go(index); //Where index could be 1, -1, 56, etc.

Sie können den Inhalt des Verlaufsstapels jedoch nicht in einem Browser bearbeiten, der die HTML5-Verlaufs-API nicht unterstützt

Weitere Informationen finden Sie im Dokument

RPDeshaies
quelle
2
Wie mache ich das mit der URL, href = ''?
Summu
@summu es wird im Browser selbst gespeichert
Ahmed Taha
20

document.referrer ist nicht in allen Situationen mit der tatsächlichen URL identisch.

Ich habe eine Anwendung, in der ich ein Frameset mit 2 Frames erstellen muss. Ein Frame ist bekannt, der andere ist die Seite, von der aus ich verlinke. Dies scheint document.referrerideal zu sein, da Sie den tatsächlichen Dateinamen nicht an das Frameset-Dokument übergeben müssen.

Wenn Sie jedoch später die untere Frameseite ändern und dann verwenden history.back(), wird die Originalseite nicht in den unteren Frame geladen, sondern neu geladen. document.referrerInfolgedessen ist das Frameset verschwunden und Sie kehren zum ursprünglichen Startfenster zurück.

Ich habe eine Weile gebraucht, um das zu verstehen. Im Verlaufsarray document.referrerhandelt es sich also nicht nur um eine URL, sondern anscheinend auch um die Referenzfenster-Spezifikation. Zumindest ist das der beste Weg, den ich derzeit verstehen kann.

Kevin bei KAB
quelle
Ab meinem letzten Test gibt 'document.referrer' nur noch den Domainnamen und nicht die vollständige URL zurück, um eine Nachverfolgung zu vermeiden.
Akash Kumar Seth
12

Wenn Sie eine Web-App oder eine Single-Page-Anwendung (SPA) schreiben, bei der das Routing in der App / im Browser statt auf einem Roundtrip zum Server erfolgt, können Sie Folgendes tun:

window.history.pushState({ prevUrl: window.location.href }, null, "/new/path/in/your/app")

In Ihrer neuen Route können Sie dann die folgenden Schritte ausführen, um die vorherige URL abzurufen:

window.history.state.prevUrl // your previous url
Jonathan Lin
quelle
0

Diejenigen von Ihnen, die Node.js und Express verwenden, können ein Sitzungscookie setzen, das sich an die aktuelle Seiten-URL erinnert, sodass Sie den Verweis beim nächsten Laden der Seite überprüfen können. Hier ist ein Beispiel, das die express-sessionMiddleware verwendet:

//Add me after the express-session middleware    
app.use((req, res, next) => {
    req.session.referrer = req.protocol + '://' + req.get('host') + req.originalUrl;
    next();
});

Sie können dann prüfen, ob ein Referrer-Cookie wie folgt vorhanden ist:

if ( req.session.referrer ) console.log(req.session.referrer);

Gehen Sie nicht davon aus, dass bei dieser Methode immer ein Referrer-Cookie vorhanden ist, da es in Fällen nicht verfügbar ist, in denen die vorherige URL eine andere Website war, die Sitzung bereinigt wurde oder nur erstellt wurde (erstmaliges Laden der Website).

Nadav
quelle
0
<script type="text/javascript">
    document.write(document.referrer);
</script>

document.referrer dient Ihrem Zweck, funktioniert jedoch nicht für Internet Explorer-Versionen vor IE9.

Es funktioniert für andere gängige Browser wie Chrome, Mozilla, Opera, Safari usw.

565
quelle
Funktioniert in IE 9 für mich
frodo2975
-8

Dadurch wird zur zuvor besuchten URL navigiert.

javascript:history.go(-1)
ishant
quelle
1
OP fragte, wie man zur vorherigen URL kommt, nicht wie man geht
Matt Jensen