Як отримати попередню URL-адресу в JavaScript?


230

Чи є спосіб отримати попередню URL-адресу в JavaScript? Щось на зразок цього:

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

Чи є щось подібне? Або я повинен просто зберігати його в файлі cookie? Мені потрібно лише знати, щоб я міг робити переходи від попередньої URL-адреси до поточної URL-адреси без якорів і все це.

Відповіді:


351
document.referrer

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

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

Якщо ви маєте справу зі станом, що рухається навколо вашого власного сайту, можливо, це менш крихке і, звичайно, корисніше використовувати один із звичайних методів управління сеансами: дані cookie, параметри URL-адрес або інформація про сеанс на стороні сервера.


4
Є також document.referrer, якщо ви прибули на поточну сторінку за посиланням (але не, наприклад, за допомогою закладок або введення в адресному рядку).
Гелліон

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

4
Ви, сер, врятували мене від болю у JavaScript!
Анна Лам

8
попередній не є референтом. не плутайте їх
Зелений

1
document.referrer не зберігає хеші з останньої URL-адреси ... вона стосується лише останньої URL-адреси.
Nmaster88

29

Якщо ви хочете перейти на попередню сторінку, не знаючи URL, ви можете скористатися новою api-історією.

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.

Але ви не можете маніпулювати вмістом стека історії в браузері, який не підтримує API історії HTML5

Для отримання додаткової інформації див. Док


2
Як це зробити, знаючи URL, href = ''?
summu

@summu він зберігається у самому браузері
Ахмед Таха

20

document.referrer не є такою ж, як фактична URL-адреса у всіх ситуаціях.

У мене є програма, де мені потрібно встановити набір кадрів з 2 кадрами. Один кадр відомий, інший - сторінка, з якої я посилаюсь. Здавалося б, це document.referrerбуло б ідеально, оскільки вам не доведеться передавати фактичне ім'я файлу в документ набору фреймів.

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

Запросив мене трохи зрозуміти це. Отже, в масиві історії 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.