如何在JavaScript中获取先前的URL?


230

有什么办法可以在JavaScript中获取以前的URL?像这样:

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

有那样的东西吗?还是应该将其存储在Cookie中?我只需要知道,就可以在没有锚点的情况下从先前的URL过渡到当前的URL。

Answers:


350
document.referrer

在许多情况下,如果用户通过单击链接进入当前页面,则将获得用户访问的最后一页的URL(与直接在地址栏中键入,或者在某些情况下,我认为通过提交表单来访问?)。由DOM级别2指定。这里更多。

window.history允许导航,但出于安全和隐私原因,不能访问会话中的URL。如果有更详细的URL历史记录,那么您访问的每个站点都可以看到您去过的所有其他站点。

如果您要处理的是在您自己的站点中移动的状态,那么使用一种常规的会话管理技术(cookie数据,URL参数或服务器端会话信息)可能不那么脆弱,而且肯定会更有用。


4
还有一个document.referrer,如果您是通过链接到达当前页面的(例如,不是通过书签或在地址栏中键入)。
Hellion

68
我最终将以前的URL存储在该站点的Cookie中,document.referrer但并不总是有效。 $.cookie("previousUrl", window.location.href, {path:"/"});
兰斯·波拉德

4
您的先生让我摆脱了JavaScript的痛苦!
Anna Lam)

8
以前不是引荐来源。不要混淆他们
Green

1
document.referrer不会保存来自上一个URL的哈希值……它仅引用上一个URL。
Nmaster88 '17

29

如果您想在不知道URL的情况下转到上一页,则可以使用新的History 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.

但是您不能在不支持HTML5历史记录API的浏览器上操纵历史记录堆栈的内容

有关更多信息,请参阅文档


2
知道网址,href =''怎么办?
summu

@summu它存储在浏览器中
Ahmed Taha

20

document.referrer 在所有情况下均与实际网址不同。

我有一个应用程序,需要在其中建立一个包含2个框架的框架集。一帧是已知的,另一帧是我要链接的页面。这似乎document.referrer很理想,因为您不必将实际文件名传递给框架集文档。

但是,如果您稍后更改底部框架页面然后使用history.back()它,则不会将原始页面加载到底部框架中,而是重新加载document.referrer,结果框架集消失了,您又回到了原始开始窗口。

花了我一点时间来理解这一点。因此,在历史记录数组中,document.referrer不仅是URL,而且显然也是引用程序窗口规范。至少,这是我目前可以理解的最好方法。


从我最近的测试“ document.referrer”开始,现在只返回域名而不是完整的URL,以避免进行跟踪。
阿卡什·库马尔·塞思

12

如果要编写在应用程序/浏览器中进行路由而不是往返于服务器的Web应用程序或单页应用程序(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,该会话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 可以满足您的目的,但不适用于IE9之前的Internet Explorer版本。

它将适用于其他流行的浏览器,例如Chrome,Mozilla,Opera,Safari等。


我可以在IE 9中工作
frodo2975

-8

这将导航到先前访问的URL。

javascript:history.go(-1)

1
OP要求获取而不是去上一个URL的方法
Matt Jensen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.