Как получить предыдущий URL в JavaScript?


230

Есть ли способ получить предыдущий URL в JavaScript? Что-то вроде этого:

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

Есть ли что-то подобное? Или я должен просто сохранить его в печенье? Мне нужно только знать, чтобы я мог делать переходы с предыдущего URL на текущий URL без привязок и все такое.

Ответы:


351
document.referrer

во многих случаях вы получите URL-адрес последней страницы, которую посетил пользователь, если он попал на текущую страницу, щелкнув ссылку (в отличие от ввода непосредственно в адресную строку, или, я полагаю, в некоторых случаях, отправив форму?). Указано DOM уровня 2 . Больше здесь.

window.historyразрешает навигацию, но не доступ к URL-адресам в сеансе по соображениям безопасности и конфиденциальности. Если бы была доступна более подробная история URL, то каждый посещенный вами сайт мог бы видеть все другие сайты, на которых вы были.

Если вы имеете дело с перемещением состояний по вашему собственному сайту, то, возможно, менее хрупко и, безусловно, более полезно использовать один из обычных методов управления сеансом: данные cookie, параметры URL или данные сеанса на стороне сервера.


4
Также есть document.referrer, если вы пришли на текущую страницу по ссылке (но не, например, по закладке или вводу в адресной строке).
Геллион

68
я закончил тем, что сохранил предыдущий URL в куки для сайта, document.referrerне всегда работает. $.cookie("previousUrl", window.location.href, {path:"/"});,
Лэнс Поллард

4
Вы, сэр, спасли меня от боли в мире JavaScript!
Анна Лам

8
предыдущий не реферер. не путайте их
Грин

1
document.referrer не сохраняет хэши из последнего URL-адреса ... он ссылается только на последний URL-адрес.
Nmaster88

29

Если вы хотите перейти на предыдущую страницу, не зная URL-адреса, вы можете использовать новый 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.

Но вы не можете управлять содержимым стека истории в браузере, который не поддерживает HTML5 History API

Для получения дополнительной информации см. Документ


2
Как это сделать, зная URL, href = ''?
Сумму

@summu хранится в самом браузере
Ахмед Таха

20

document.referrer не совпадает с фактическим URL во всех ситуациях.

У меня есть приложение, где мне нужно установить frameset с 2 кадрами. Один кадр известен, другой - это страница, на которую я ссылаюсь. Казалось бы, это document.referrerбыло бы идеально, потому что вам не нужно было бы передавать фактическое имя файла в документ набора фреймов.

Однако, если вы позже измените страницу нижнего фрейма и затем используете history.back()ее, исходная страница не загружается в нижний фрейм, вместо этого она перезагружается, document.referrerи в результате набор фреймов исчезает, и вы возвращаетесь к исходному начальному окну.

Мне понадобилось немного времени, чтобы понять это. Таким образом, в массиве history, document.referrerэто не только URL, это, по-видимому, спецификация окна реферера. По крайней мере, это лучший способ понять это сейчас.


Что касается моего последнего тестирования, то document.referrer теперь просто возвращает доменное имя, а не полный URL, чтобы избежать отслеживания.
Акаш Кумар Сет

12

Если вы пишете веб-приложение или одностраничное приложение (SPA), в котором маршрутизация выполняется в приложении / браузере, а не в обратном направлении на сервер, вы можете сделать следующее:

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

Затем в вашем новом маршруте вы можете сделать следующее, чтобы получить предыдущий URL:

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

0

Те из вас, кто использует Node.js и Express, могут установить cookie-файл сеанса, который запомнит URL текущей страницы, что позволит вам проверить реферер при загрузке следующей страницы. Вот пример, который использует express-sessionпромежуточное программное обеспечение:

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

Затем вы можете проверить наличие cookie-файла реферера следующим образом:

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

Не предполагайте, что cookie-файл реферера всегда существует с этим методом, поскольку он не будет доступен в тех случаях, когда предыдущий URL-адрес был другим веб-сайтом, сеанс был очищен или был только что создан (загрузка веб-сайта впервые).


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

document.referrer служит вашей цели, но не работает для версий Internet Explorer ранее, чем IE9.

Он будет работать для других популярных браузеров, таких как Chrome, Mozilla, Opera, Safari и т. Д.


У меня работает в IE 9
frodo2975

-8

Это позволит перейти к ранее посещенному URL.

javascript:history.go(-1)

1
ОП спросил, как получить, а не как перейти к предыдущему URL
Мэтт Дженсен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.