2009-06-11 63 views
11

是否有可能检查history.go(-1)是否有值?我知道你不能直接访问history.previous。页面历史记录 - 后退按钮是否存在?

我想远离document.referrer,因为我知道它可以在某些情况下被阻止。

这是我正在做的。我有一个错误页面,在这个页面上我想要有一个BACK按钮(如果它不是历史中唯一的项目)或关闭按钮(如果是)。

+0

[如何检查用户是否可以返回浏览器历史记录或不可以](http://stackoverflow.com/questions/3588315/how-to-check-if-the-user-can-go -back-in-browser-history-or-not) – bummi 2016-01-22 06:50:14

回答

18
if (history.length) { 
    //There is history to go back to 
    history.go(-1); 
}  
+0

哈,呃!有时候这是最简单的答案。 – 2009-06-11 18:19:18

+3

有没有任何方法检查前进按钮是否存在? – Mischa 2012-01-10 08:33:02

+0

检查前面的页面是否为'about:newtab`; – 2014-05-30 11:53:08

2

如果历史长度大于0,那么它至少包含一个历史点。

if (history.length) 
10

其实,history.length始终是一个或更多,因为目前的页数。另外,如果您有转发历史记录(即您使用后退按钮),那么这些页面也会计数。所以你需要一个更复杂的检查:

if((1 < history.length) && document.referrer) { 
-1
function test() { 
     document.URL = document.referrer;    
    } 
2

没有跨浏览器的方法来做到这一点。即使没有历史记录条目,也可以设置Document.Referrer。

我想出了下面的“黑客”。它利用onbeforeunload事件来检测浏览器是否开始离开页面。如果它不在特定的时间范围内,它只会重定向到后备。

window.goBack = function goBack(fallback){ 
    var useFallback = true; 
    window.onbeforeunload = function(){ 
    useFallback = false; 
    } 
    window.history.back(); 

    setTimeout(function(){ 
    if (useFallback){ window.location.href = fallback; } 
    }, 100); 
} 

您可以使用goBack("fallback.example.org")调用此函数。

其中一个用例是,您可能希望向任何页面添加后退按钮,并且还要确保此后退按钮即使在用户直接访问此页面时也能正常工作(例如,通过书签,直接链接等)。

因此,无论它执行history.back()还是没有条目,它都会重定向到一个后备。

相关问题