有没有办法在JavaScript中获取以前的URL?像这样:
alert("previous url is: " + window.history.previous.href);
有类似的东西吗?或者我应该将它存储在cookie中?我只需要知道,所以我可以从之前的URL转换到当前的URL而没有锚点和所有这些。
答案 0 :(得分:296)
document.referrer
在很多情况下会获取用户访问过的最后一页的网址,如果他们通过点击链接到达当前页面(而不是直接在地址栏中输入,或者我相信在某些情况下,通过提交表单) ?)。由DOM Level 2指定。 More here.
window.history
允许导航,但出于安全和隐私原因,不允许访问会话中的网址。如果有更详细的URL历史记录,那么您访问的每个站点都可以看到您去过的所有其他站点。
如果你正在处理在你自己的网站上移动的状态,那么它可能不那么脆弱,而且使用正常的会话管理技术之一肯定更有用:cookie数据,URL参数或服务器端会话信息。
答案 1 :(得分:21)
document.referrer
这是标准的,它将提供您访问过的网址。
答案 2 :(得分:21)
如果您想在不知道网址的情况下转到上一页,可以使用新的历史记录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的浏览器上操作历史记录堆栈的内容
有关详细信息,请参阅doc
答案 3 :(得分:15)
document.referrer
与实际网址不同。
我有一个应用程序,我需要建立一个2帧的框架集。一帧是已知的,另一帧是我链接的页面。似乎document.referrer
是理想的,因为您不必将实际文件名传递给框架集文档。
但是,如果您稍后更改底部框架页面然后使用history.back()
,则不会将原始页面加载到底部框架中,而是重新加载document.referrer
,结果框架集消失了你回到了原来的起始窗口。
我花了一点时间才明白这一点。所以在历史数组中,document.referrer
不仅是一个URL,它显然也是引用窗口规范。至少,这是我此时能够理解的最佳方式。
答案 4 :(得分:1)
如果要编写在其中进行路由而不是与浏览器往返的Web应用程序或单页应用程序(SPA),则可以执行以下操作:
window.history.pushState({ prevUrl: window.location.href }, null, "/new/path/in/your/app")
然后,在新路径中,您可以执行以下操作来检索先前的URL:
window.history.state.prevUrl // your previous url
答案 5 :(得分:1)
如果有人来自 React-world,我最终使用 history
-library、useEffect 和 localStorage 的组合解决了我的用例
当用户选择新项目时:
function selectProject(customer_id: string, project_id: string){
const projectUrl = `/customer/${customer_id}/project/${project_id}`
localStorage.setItem("selected-project", projectUrl)
history.push(projectUrl)
}
当用户从另一个网站回来时。如果 localStorage 中有东西,就把他送到那里。
useEffect(() => {
const projectUrl = localStorage.getItem("selected-project")
if (projectUrl) {
history.push(projectUrl)
}
}, [history])
当用户退出项目时,清空localStorage
const selectProject = () => {
localStorage.removeItem("selected-project")
history.push("/")
}
答案 6 :(得分: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是另一个网站,清理或创建会话(首次加载网站)的情况下,该网址将不可用。
答案 7 :(得分:0)
这将导航到先前访问的URL。 javascript:history.go(-1)
答案 8 :(得分:-1)
document.referrer
将提供上一页网址,但它适用于所有浏览器,如Opera,Mozilla Firefox,Safari等,但无法在Internet Explorer中使用。在IE中使用document.referrer
时,它将为null。