¿Cómo obtener la URL anterior en JavaScript?

230

¿Hay alguna forma de obtener la URL anterior en JavaScript? Algo como esto:

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

¿Hay algo como eso? ¿O debería guardarlo en una cookie? Solo necesito saber para poder hacer transiciones desde la URL anterior a la URL actual sin anclajes y todo eso.

Lance Pollard
fuente

Respuestas:

351
document.referrer

en muchos casos, obtendrá la URL de la última página que visitó el usuario, si llegó a la página actual haciendo clic en un enlace (en lugar de escribir directamente en la barra de direcciones, o creo que en algunos casos, al enviar un formulario). Especificado por DOM Nivel 2 . Más aquí.

window.historypermite la navegación, pero no el acceso a las URL en la sesión por razones de seguridad y privacidad. Si hubiera disponible un historial de URL más detallado, cada sitio que visite podría ver todos los otros sitios en los que estuvo.

Si está lidiando con el estado moviéndose por su propio sitio, entonces posiblemente sea menos frágil y ciertamente más útil usar una de las técnicas normales de administración de sesión: datos de cookies, parámetros de URL o información de sesión del lado del servidor.

Ben Zotto
fuente
44
También hay document.referrer, si llegaste a la página actual a través de un enlace (pero no, por ejemplo, mediante un marcador o escribiendo en la barra de direcciones).
Hellion
68
Terminé almacenando la URL anterior en cookies para el sitio, document.referrerno siempre funciona. $.cookie("previousUrl", window.location.href, {path:"/"});.
Lance Pollard
44
¡Señor, me ha salvado de un mundo de dolor de JavaScript!
Anna Lam
8
anterior no es referente. no los confunda
Verde
1
document.referrer no guarda los hashes de la última url ... solo se refiere a la última url.
Nmaster88
29

Si desea ir a la página anterior sin conocer la URL, puede usar la nueva API de Historial.

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.

Pero no puede manipular el contenido de la pila de historial en el navegador que no admite la API de historial HTML5

Para más información ver el documento

RPDeshaies
fuente
2
¿Cómo hacerlo con conocer la url, href = ''?
summu
@summu se almacena en el navegador mismo
Ahmed Taha
20

document.referrer no es lo mismo que la URL real en todas las situaciones.

Tengo una aplicación donde necesito establecer un conjunto de marcos con 2 marcos. Se conoce un marco, el otro es la página desde la que estoy enlazando. Parece que document.referrersería ideal porque no tendría que pasar el nombre real del archivo al documento del conjunto de marcos.

Sin embargo, si luego cambia la página del marco inferior y luego la usa history.back(), no se carga la página original en el marco inferior, sino que se vuelve a cargar document.referrery, como resultado, el conjunto de marcos desaparece y vuelve a la ventana de inicio original.

Me tomó un poco de tiempo entender esto. Entonces, en la matriz de historial, document.referrerno es solo una URL, aparentemente también es la especificación de la ventana de referencia. Al menos, esa es la mejor manera en que puedo entenderlo en este momento.

kevin en KAB
fuente
A partir de mi última prueba, 'document.referrer' ahora solo devuelve el nombre de dominio y no la URL completa para evitar el seguimiento.
Akash Kumar Seth
12

Si está escribiendo una aplicación web o una aplicación de página única (SPA) donde el enrutamiento se realiza en la aplicación / navegador en lugar de un viaje de ida y vuelta al servidor, puede hacer lo siguiente:

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

Luego, en su nueva ruta, puede hacer lo siguiente para recuperar la URL anterior:

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

Aquellos de ustedes que usan Node.js y Express pueden configurar una cookie de sesión que recordará la URL de la página actual, lo que les permitirá verificar el referente en la próxima carga de la página. Aquí hay un ejemplo que usa el 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();
});

Luego puede verificar la existencia de una cookie de referencia de esta manera:

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

No asuma que siempre existe una cookie de referencia con este método, ya que no estará disponible en instancias donde la URL anterior era otro sitio web, la sesión se limpió o se acaba de crear (carga del sitio web por primera vez).

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

document.referrer cumple con su propósito, pero no funciona para versiones de Internet Explorer anteriores a IE9.

Funcionará para otros navegadores populares, como Chrome, Mozilla, Opera, Safari, etc.

565
fuente
Funciona en IE 9 para mí
frodo2975
-8

Esto navegará a la URL visitada anteriormente.

javascript:history.go(-1)
ishant
fuente
1
OP preguntó cómo llegar, no cómo ir, a la URL anterior
Matt Jensen