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

时间:2010-08-20 05:06:46

标签: javascript

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

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

有类似的东西吗?或者我应该将它存储在cookie中?我只需要知道,所以我可以从之前的URL转换到当前的URL而没有锚点和所有这些。

9 个答案:

答案 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。