2009-06-11 104 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()還是沒有條目,它都會重定向到一個後備。

相關問題