Comment obtenir l'URL précédente en JavaScript?


230

Existe-t-il un moyen d'obtenir l'URL précédente en JavaScript? Quelque chose comme ça:

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

Y a-t-il quelque chose comme ça? Ou devrais-je simplement le stocker dans un cookie? J'ai seulement besoin de savoir pour pouvoir faire des transitions de l'URL précédente à l'URL actuelle sans ancres et tout ça.

Réponses:


351
document.referrer

dans de nombreux cas, vous obtiendrez l'URL de la dernière page visitée par l'utilisateur, s'il est arrivé à la page actuelle en cliquant sur un lien (par opposition à taper directement dans la barre d'adresse, ou je crois dans certains cas, en soumettant un formulaire?). Spécifié par DOM niveau 2 . Plus ici.

window.historypermet la navigation, mais pas l'accès aux URL dans la session pour des raisons de sécurité et de confidentialité. Si un historique d'URL plus détaillé était disponible, alors chaque site que vous visitez pourrait voir tous les autres sites que vous avez visités.

Si vous avez affaire à un état se déplaçant sur votre propre site, il est peut-être moins fragile et certainement plus utile d'utiliser l'une des techniques de gestion de session normales: données de cookie, paramètres d'URL ou informations de session côté serveur.


4
Il y a aussi document.referrer, si vous êtes arrivé à la page actuelle via un lien (mais pas, par exemple, par un signet ou en tapant dans la barre d'adresse).
Hellion

68
j'ai fini par stocker l'url précédente dans les cookies du site, document.referrerne fonctionne pas toujours. $.cookie("previousUrl", window.location.href, {path:"/"});.
Lance Pollard

4
Vous m'avez sauvé d'un monde de douleur JavaScript!
Anna Lam

8
précédent n'est pas référent. ne les confondez pas
vert

1
document.referrer n'enregistre pas les hachages de la dernière URL ... il se réfère uniquement à la dernière URL.
Nmaster88

29

Si vous souhaitez accéder à la page précédente sans connaître l'url, vous pouvez utiliser la nouvelle API Historique.

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.

Mais vous ne pouvez pas manipuler le contenu de la pile d'historique sur un navigateur qui ne prend pas en charge l'API Historique HTML5

Pour plus d'informations voir la doc


2
Comment faire en connaissant l'url, href = ''?
summu

@summu il est stocké dans le navigateur lui
Ahmed Taha

20

document.referrer n'est pas la même que l'URL réelle dans toutes les situations.

J'ai une application où j'ai besoin d'établir un frameset avec 2 frames. Un cadre est connu, l'autre est la page à partir de laquelle je crée un lien. Il semblerait que ce document.referrerserait idéal car vous n'auriez pas à transmettre le nom de fichier réel au document de jeu de cadres.

Cependant, si vous modifiez ultérieurement la page du cadre inférieur et que vous l'utilisez ensuite, history.back()la page d'origine ne sera pas chargée dans le cadre inférieur, mais elle se rechargeradocument.referrer et, par conséquent, le jeu de cadres a disparu et vous revenez à la fenêtre de démarrage d'origine.

Cela m'a pris un peu de temps pour comprendre cela. Donc, dans le tableau d'historique, ce document.referrern'est pas seulement une URL, c'est aussi apparemment la spécification de la fenêtre de référence. Du moins, c'est la meilleure façon de le comprendre en ce moment.


À partir de mon dernier test 'document.referrer', renvoyez maintenant simplement le nom de domaine et non l'URL complète pour éviter le suivi.
Akash Kumar Seth

12

Si vous écrivez une application Web ou une application à page unique (SPA) où le routage a lieu dans l'application / le navigateur plutôt qu'un aller-retour vers le serveur, vous pouvez effectuer les opérations suivantes:

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

Ensuite, dans votre nouvel itinéraire, vous pouvez effectuer les opérations suivantes pour récupérer l'URL précédente:

window.history.state.prevUrl // your previous url

0

Ceux d'entre vous qui utilisent Node.js et Express peuvent définir un cookie de session qui se souviendra de l'URL de la page actuelle, vous permettant ainsi de vérifier le référent lors du prochain chargement de la page. Voici un exemple qui utilise le express-sessionmiddleware:

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

Vous pouvez ensuite vérifier l'existence d'un cookie de référence comme ceci:

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

Ne présumez pas qu'un cookie de référence existe toujours avec cette méthode car il ne sera pas disponible dans les cas où l'URL précédente était un autre site Web, la session a été nettoyée ou vient d'être créée (premier chargement du site Web).


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

document.referrer sert votre objectif, mais cela ne fonctionne pas pour les versions d'Internet Explorer antérieures à IE9.

Cela fonctionnera pour d'autres navigateurs populaires, comme Chrome, Mozilla, Opera, Safari, etc.


Fonctionne dans IE 9 pour moi
frodo2975

-8

Cela permettra d'accéder à l'URL précédemment visitée.

javascript:history.go(-1)

1
OP a demandé comment accéder, et non comment aller, à l'URL précédente
Matt Jensen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.