Javascript 返回同一域时,history.back()不工作?

Javascript 返回同一域时,history.back()不工作?,javascript,jquery,cross-browser,compatibility,Javascript,Jquery,Cross Browser,Compatibility,我想实现一个功能,确保在所有浏览器上提示返回到给定的域中,并避免在历史上跳得太远 这是我目前的进展: <script type="text/javascript"> window.addEventListener("load", function(event){ if (document.referrer.indexOf(window.location.host) !== -1) { history.back();

我想实现一个功能,确保在所有浏览器上提示返回到给定的域中,并避免在历史上跳得太远

这是我目前的进展:

<script type="text/javascript">   
window.addEventListener("load", function(event){
    if (document.referrer.indexOf(window.location.host) !== -1) {
        history.back();
    }
});
</script>

addEventListener(“加载”),函数(事件){
if(document.referer.indexOf(window.location.host)!=-1){
历史。返回();
}
});
这就是我之前实现的:

<script type="text/javascript">

window.addEventListener("load",function(event){
    var historyTraversal=event.persisted||
    (typeof window.performance!=="undefined"&&
    window.performance.navigation.type===2);
    if(historyTraversal){
        window.history.back();
    }
});

</script>

addEventListener(“加载”),函数(事件){
var historyTraversal=event.persistend||
(窗口的类型。性能!=“未定义”&&
window.performance.navigation.type==2);
if(历史遍历){
window.history.back();
}
});
这两个脚本之间是否存在显著差异

我想实现一个功能,确保在所有浏览器上提示返回到给定的域中,并避免在历史上跳得太远

似乎您所编写的是一个事件侦听器,用于在加载窗口时进行侦听。你想什么时候使用你说的功能

现在,您提供的第一个脚本执行一个函数。该函数检查(链接到当前页面的页面的URL),如果当前主机名位于该引用URL中(即返回除-1以外的值,表示匹配),则浏览器返回

假设存在此加载处理程序,在每次页面加载时,浏览器都会返回,直到引用者不包含当前主机名

但是,我不能说这完全符合您的要求,这取决于您返回定义load handler函数的每个页面

回答你的第二个问题:

这两个脚本之间是否存在显著差异

在您列出的第二个脚本中,您还有一个用于窗口加载事件的事件处理程序,但是第二个处理程序不是比较主机名和引用程序,而是依赖于不推荐使用的功能。将选中,如果它是
2
(表示通过“返回”历史记录导航到当前页面),则返回

这两种方法之间的主要区别:

  • 第一个函数基于域返回,而第二个函数根本不查看域
  • 第二个函数依赖于不推荐使用的功能,而第一个函数更简单
  • 只要返回到当前页面,第二个函数就会返回,而第一个函数只会返回到上一个页面与当前页面所在的域
第一个功能似乎更符合您所说的,但这两个功能都不是特别好的实现方法,因为如果用户使用书签或直接在浏览器中键入链接(即,链接未引用页面),则引用者将为空

相反,如果您可以在cookie或其他基于会话的存储中跟踪,则最好跟踪用户从要返回的初始页面向前移动的页面数,然后使用
history.go(-n)
返回您跟踪的页面数
n
。(见:)


这当然会带来自身的问题,尤其是当用户离开您的域,然后返回时会发生什么情况-下一步是找出如何保持准确的计数,以便始终返回到您域中URL的最新初始实例。

它们看起来一点也不相似,它们有着显著的不同。你需要详细说明你尝试了什么,没有成功,还有什么顾虑。只是对改进代码的一般要求太广泛,无法回答有关SOI的问题在第一个脚本中,我尝试创建第二个脚本的更新版本,其中包含不推荐的内容。感谢您提供了非常广泛和深入的答案。我尝试实现这类代码的主要原因是因为第三方站点(Tumblr)的框架问题,它有一个bug,当在移动浏览器上提示返回时,它不会加载上一页,而是一次又一次地重新加载当前页。我试图覆盖这个,第二个脚本确实解决了移动问题,但我试图实现一些没有弃用内容的东西,所以我有点左右为难…没问题-很高兴能提供帮助!当用户试图返回时,是Tumblr上的用户(Tumblr只是重新加载而不是返回),还是您站点上的用户试图返回Tumblr而历史不再工作,因此它会重新加载您的页面?我不清楚这里的实际用例。在我看来,您很难覆盖Tumblr的功能,因为您无法将代码注入到它们的页面中。您是在使用iframes还是嵌入式Tumblr页面或其他什么?我之前已经发布了一个问题,它描述了基本上相同的问题。这里有一个链接:。我有一个演示站点,显示问题已部分解决,但Firefox(桌面浏览器)仍存在一些功能问题。我无法转到,因为您有一个SSL错误阻止了我:
SSL\u error\u BAD\u CERT\u DOMAIN
:“网站通过证书证明其身份。Firefox不信任此网站,因为它使用的证书对www.testblog123098.tumblr.com无效。该证书仅对以下名称有效:*.tumblr.com,tumblr.com“