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.
let previousUrl = null;
if(document.referrer){
previousUrl = document.referrer;
sessionStorage.setItem("isTrickApplied",false);
}else{
let isTrickApplied= sessionStorage.getItem("isTrickApplied");
if(isTrickApplied){
previousUrl = sessionStorage.getItem("prev");
sessionStorage.setItem("isTrickApplied",false);
}else{
history.back(); //Go to the previous page
sessionStorage.setItem("prev",window.location.href);
sessionStorage.setItem("isTrickApplied",true);
history.forward(); //Go to the next page in the stack
}
}
9条答案
按热度按时间hpcdzsge1#
在许多情况下,如果用户通过单击链接(而不是直接在地址栏中键入,或者我相信在某些情况下,通过提交表单?)到达当前页面,则会获得用户访问的最后一个页面的URL。
window.history
允许导航,但出于安全和隐私原因,不允许访问会话中的URL。如果有更详细的URL历史记录,则您访问的每个站点都可以看到您访问过的所有其他站点。如果您正在处理自己站点中的状态移动,那么使用一种常规会话管理技术可能会更安全,而且肯定会更有用:cookie数据、URL参数或服务器端会话信息。
nvbavucw2#
如果你想在不知道网址的情况下进入上一页,你可以使用新的历史API。
但是你不能在不支持API的浏览器上操作历史堆栈的内容
有关更多信息,请参见doc
5tmbdcev3#
如果您正在编写Web应用或单页应用(SPA),其中路由在应用/浏览器中进行,而不是到服务器的往返,则可以执行以下操作:
然后,在新路由中,您可以执行以下操作来检索以前的URL:
2mbi3lxu4#
document.referrer
并非在所有情况下都与实际URL相同。我有一个应用程序,我需要建立一个有2个框架的框架集。一个框架是已知的,另一个是我链接的页面。看起来
document.referrer
是理想的,因为你不必将实际的文件名传递给框架集文档。但是,如果您稍后更改底部框架页面,然后使用
history.back()
,它不会将原始页面加载到底部框架中,而是重新加载document.referrer
,结果框架集消失,您返回到原始的开始窗口。我花了一点时间来理解这一点。所以在历史数组中,
document.referrer
不仅仅是一个URL,它显然也是引用窗口规范。至少,这是我目前能够理解它的最好方式。xu3bshqb5#
document.referrer
可以满足您的要求,但它不适用于IE9之前的Internet Explorer版本。它将适用于其他流行的浏览器,如Chrome,Mozilla,Opera,Safari等。
irlmq6kh6#
如果有人来自React-world,我最终使用
history
-library、useEffect和localStorage的组合来解决我的用例当用户选择新项目时:
当用户从另一个网站返回时,如果localStorage中有内容,请将其发送到该网站。
用户退出项目时,清空localStorage
nsc4cvqm7#
我在
SPA
单页应用程序上遇到了同样的问题,我解决这个问题的最简单方法是使用本地存储,如下所示:我把需要的网址存储在本地存储器中
在下一个屏幕上(或几个屏幕后),我取得的网址可以取代它如下
b0zn9rqh8#
使用Node.js和Express的用户可以设置一个会话cookie来记住当前页面的URL,这样就可以在下一次页面加载时检查引用者。下面是一个使用
express-session
中间件的示例:然后,您可以检查是否存在引用cookie,如下所示:
不要假设引用cookie始终存在于此方法中,因为它在以前的URL是另一个网站、会话已清理或刚刚创建(首次加载网站)的情况下不可用。
brvekthn9#
即使document.referer为空也执行该工作的变通方法: