2009-06-11 40 views
11

Có thể kiểm tra xem có giá trị nào cho history.go (-1) không? Tôi biết bạn không thể truy cập history.previous trực tiếp.Lịch sử trang - nút quay lại tồn tại?

Tôi đang cố gắng tránh xa tài liệu.referrer vì tôi biết nó có thể bị chặn trong một số trường hợp.

Đây là những gì tôi đang cố gắng làm. Tôi có một trang lỗi, trên trang này tôi muốn hoặc có một nút BACK (nếu nó không phải là mục duy nhất trong lịch sử) hoặc một nút đóng (nếu có).

+0

Bản sao có thể có của [Cách kiểm tra xem người dùng có thể quay lại lịch sử trình duyệt hay không] (http://stackoverflow.com/questions/3588315/how-to-check-if-the-user-can-go -back-in-browser-history-or-not) – bummi

Trả lời

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

Ha, duh! Đôi khi đó là câu trả lời dễ nhất. –

+3

Có cách nào để kiểm tra xem nút chuyển tiếp có tồn tại không? – Mischa

+0

không kiểm tra nếu trang trước đó là 'about: newtab' hay không;) –

2

Nếu lịch sử có độ dài lớn hơn 0, thì lịch sử có chứa ít nhất một điểm lịch sử.

if (history.length) 
+0

yeah và rằng điểm lịch sử có thể là 'về: newtab' quá đúng? –

10

Thực tế, history.length luôn là một hoặc nhiều, vì số lượng trang hiện tại. Ngoài ra, nếu bạn có lịch sử chuyển tiếp (tức là bạn đã sử dụng nút quay lại), các trang đó cũng được tính. Vì vậy, bạn cần kiểm tra phức tạp hơn:

if((1 < history.length) && document.referrer) { 
+1

Có cách nào để kiểm tra xem nút chuyển tiếp có tồn tại không? – Mischa

+1

Liên kết giới thiệu được chuyển nếu liên kết 'target =" _ blank "' được nhấp và bạn không thể làm "quay lại" trong tab mới, vì vậy giải pháp này không hoàn hảo. – Finesse

-1
function test() { 
     document.URL = document.referrer;    
    } 
2

Không có cách tiếp cận qua trình duyệt để thực hiện điều này. Document.Referrer có thể được thiết lập ngay cả khi không có mục lịch sử nào tồn tại.

Tôi nghĩ ra "hack" sau đây. Nó sử dụng sự kiện onbeforeunload để phát hiện xem trình duyệt có bắt đầu rời khỏi trang hay không. Nếu nó không trong một khoảng thời gian nhất định nó sẽ chỉ chuyển hướng đến dự phòng.

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); 
} 

Bạn có thể gọi hàm này bằng cách sử dụng goBack("fallback.example.org").

Một trong các trường hợp sử dụng là bạn có thể muốn thêm nút quay lại vào bất kỳ trang nào và cũng muốn đảm bảo rằng nút quay lại này hoạt động ngay cả khi người dùng truy cập trực tiếp trang này (ví dụ: theo dấu trang, liên kết trực tiếp, v.v ...).

Vì vậy, hoặc nó thực hiện một history.back() hoặc nếu không có mục nhập, nó sẽ chuyển hướng đến một dự phòng.

Các vấn đề liên quan