Come ottenere l'URL precedente in JavaScript?


230

Esiste un modo per ottenere l'URL precedente in JavaScript? Qualcosa come questo:

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

C'è qualcosa del genere? O dovrei semplicemente memorizzarlo in un cookie? Ho solo bisogno di sapere in modo da poter fare le transizioni dall'URL precedente all'URL corrente senza ancore e tutto il resto.

Risposte:


351
document.referrer

in molti casi ti verrà fornito l'URL dell'ultima pagina visitata dall'utente, se ha raggiunto la pagina corrente facendo clic su un collegamento (anziché digitare direttamente nella barra degli indirizzi, o credo in alcuni casi, inviando un modulo?). Specificato da DOM Livello 2 . Più qui

window.historyconsente la navigazione, ma non l'accesso agli URL nella sessione per motivi di sicurezza e privacy. Se fosse disponibile una cronologia degli URL più dettagliata, tutti i siti visitati potrebbero vedere tutti gli altri siti visitati.

Se hai a che fare con lo stato che si sposta sul tuo sito, è forse meno fragile e sicuramente più utile utilizzare una delle normali tecniche di gestione della sessione: dati sui cookie, parametri URL o informazioni sulla sessione lato server.


4
C'è anche document.referrer, se sei arrivato alla pagina corrente tramite un link (ma non, ad esempio, tramite segnalibro o digitando nella barra degli indirizzi).
Hellion,

68
ho finito per memorizzare l'URL precedente nei cookie per il sito, document.referrernon sempre funziona. $.cookie("previousUrl", window.location.href, {path:"/"});.
Lance Pollard,

4
Signore, mi avete salvato da un mondo di dolore JavaScript!
Anna Lam,

8
precedente non è referrer. non confonderli
Green,

1
document.referrer non salva gli hash dall'ultimo url ... si riferisce solo all'ultimo url.
Nmaster88,

29

Se vuoi andare alla pagina precedente senza conoscere l'URL, puoi usare la nuova API History.

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.

Ma non è possibile manipolare il contenuto dello stack della cronologia sul browser che non supporta l'API della cronologia HTML5

Per ulteriori informazioni consultare il doc


2
Come farlo con la conoscenza dell'URL, href = ''?
summu

@summu è memorizzato nel browser stesso
Ahmed Taha,

20

document.referrer non è uguale all'URL effettivo in tutte le situazioni.

Ho un'applicazione in cui devo stabilire un set di frame con 2 frame. Un frame è noto, l'altro è la pagina da cui sto collegando. Sembrerebbe che document.referrersarebbe l'ideale perché non dovresti passare il nome del file effettivo al documento del set di frame.

Tuttavia, se in seguito si modifica la pagina del frame inferiore e la si utilizza history.back()non carica la pagina originale nel frame inferiore, si ricarica document.referrere di conseguenza il set di frame scompare e si torna alla finestra iniziale originale.

Mi ci è voluto un po 'per capirlo. Quindi, nell'array della cronologia, document.referrernon è solo un URL, ma apparentemente è anche la specifica della finestra di riferimento. Almeno, questo è il modo migliore in cui riesco a capirlo in questo momento.


A partire dal mio ultimo test "document.referrer" ora restituisco solo il nome di dominio e non l'URL completo per evitare il monitoraggio.
Akash Kumar Seth,

12

Se si sta scrivendo un'app Web o un'applicazione a pagina singola (SPA) in cui il routing avviene nell'app / browser anziché in un viaggio di andata e ritorno al server, è possibile effettuare le seguenti operazioni:

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

Quindi, nel nuovo percorso, è possibile effettuare le seguenti operazioni per recuperare l'URL precedente:

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

0

Quelli di voi che usano Node.js ed Express possono impostare un cookie di sessione che ricorderà l'URL della pagina corrente, consentendo così di controllare il referrer al caricamento della pagina successiva. Ecco un esempio che utilizza il 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();
});

È quindi possibile verificare l'esistenza di un cookie referrer in questo modo:

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

Non dare per scontato che esista sempre un cookie referrer con questo metodo in quanto non sarà disponibile nei casi in cui l'URL precedente era un altro sito Web, la sessione è stata pulita o è stata appena creata (caricamento del sito Web per la prima volta).


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

document.referrer serve al tuo scopo, ma non funziona per le versioni di Internet Explorer precedenti a IE9.

Funzionerà con altri browser popolari, come Chrome, Mozilla, Opera, Safari ecc.


Funziona in IE 9 per me
frodo2975,

-8

Questo passerà all'URL precedentemente visitato.

javascript:history.go(-1)

1
OP ha chiesto come ottenere, non come andare, all'URL precedente
Matt Jensen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.