Como obter o URL anterior em JavaScript?

230

Existe alguma maneira de obter o URL anterior em JavaScript? Algo assim:

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

Existe algo assim? Ou devo apenas armazená-lo em um cookie? Eu só preciso saber para que eu possa fazer transições do URL anterior para o URL atual sem âncoras e tudo isso.

Lance Pollard
fonte

Respostas:

351
document.referrer

em muitos casos, você obtém o URL da última página que o usuário visitou, se ele chegou à página atual clicando em um link (em vez de digitar diretamente na barra de endereços, ou eu acredito em alguns casos, enviando um formulário?). Especificado pelo DOM Nível 2 . Mais aqui.

window.historypermite navegação, mas não acesso a URLs na sessão por motivos de segurança e privacidade. Se um histórico de URLs mais detalhado estivesse disponível, todos os sites que você visitar poderiam ver todos os outros sites em que você esteve.

Se você estiver lidando com mudanças de estado em seu próprio site, é possivelmente menos frágil e certamente mais útil usar uma das técnicas normais de gerenciamento de sessões: dados de cookies, parâmetros de URL ou informações de sessão no servidor.

Ben Zotto
fonte
4
Também há document.referrer, se você chegou à página atual por meio de um link (mas não, por exemplo, por marcador ou digitando na barra de endereço).
Hellion
68
acabei armazenando o URL anterior em cookies para o site, document.referrernem sempre funciona. $.cookie("previousUrl", window.location.href, {path:"/"});.
precisa saber é o seguinte
4
O senhor me salvou de um mundo de dor no JavaScript!
Anna Lam
8
anterior não é referenciador. não os confunda #
Green
1
O document.referrer não salva hashes do último URL ... refere-se apenas ao último URL.
N
29

Se você quiser ir para a página anterior sem saber o URL, poderá usar a nova API do Histórico.

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.

Mas você não pode manipular o conteúdo da pilha de histórico no navegador que não suporta a API de histórico do HTML5

Para mais informações, consulte o documento

RPDeshaies
fonte
2
Como fazer isso com o conhecimento do URL, href = ''?
Summu 25/05/19
@summu está armazenado no próprio navegador
Ahmed Taha
20

document.referrer não é o mesmo que o URL real em todas as situações.

Eu tenho um aplicativo em que preciso estabelecer um conjunto de quadros com 2 quadros. Um quadro é conhecido, o outro é a página da qual estou vinculando. Parece que document.referrerseria o ideal, porque você não precisaria passar o nome do arquivo real para o documento do conjunto de quadros.

No entanto, se você alterar posteriormente a página do quadro inferior e usá- history.back()la, ela não carregará a página original no quadro inferior; em vez disso, ela será recarregada document.referrere, como resultado, o conjunto de quadros desaparecerá e você voltará à janela inicial original.

Demorei um pouco para entender isso. Portanto, na matriz de histórico, document.referrernão é apenas uma URL, aparentemente é também a especificação da janela de referência. Pelo menos, é a melhor maneira que eu posso entender neste momento.

kevin na KAB
fonte
No meu último teste 'document.referrer', basta retornar o nome do domínio e não o URL completo para evitar o rastreamento.
Akash Kumar Seth
12

Se você estiver escrevendo um aplicativo Web ou um aplicativo de página única (SPA), em que o roteamento ocorre no aplicativo / navegador, em vez de uma ida e volta ao servidor, faça o seguinte:

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

Em sua nova rota, você pode fazer o seguinte para recuperar o URL anterior:

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

Aqueles que usam Node.js e Express podem definir um cookie de sessão que lembrará o URL da página atual, permitindo verificar o referenciador no carregamento da próxima página. Aqui está um exemplo que usa o 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();
});

Você pode então verificar a existência de um cookie de referência da seguinte maneira:

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

Não assuma que um cookie de referência sempre exista com esse método, pois não estará disponível nas instâncias em que o URL anterior era outro site, a sessão foi limpa ou foi criada (carregamento inicial do site pela primeira vez).

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

document.referrer serve ao seu objetivo, mas não funciona nas versões do Internet Explorer anteriores ao IE9.

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

565
fonte
Funciona no IE 9 para mim
frodo2975
-8

Isso irá navegar para o URL visitado anteriormente.

javascript:history.go(-1)
ishant
fonte
1
OP pediu como chegar, e não como ir, para a URL anterior
Matt Jensen