8

Giống như tiêu đề cho biết, tôi muốn có thể thực hiện sự kiện onstatechange khác nếu chức năng pushState được gọi, thay vì chức năng back. Hoặc, nếu hàm go là số âm hoặc dương.Có cách nào để biết hướng nhà nước đi với history.js là gì?

Ví dụ:

nếu History.pushState() hoặc History.go(1) được gọi, tôi muốn gọi lại những statechange kiện để được forwardPushState

nếu History.back() hoặc History.go(-1) được gọi, tôi muốn gọi lại những statechange kiện để được backwardsPushState

+1

Theo dõi các trang đã ghé thăm, nếu trang hiện chuyển hướng đến trang cuối cùng đã đến thăm, rất có thể là hướng ngược. – adeneo

+0

Sẽ tốt hơn nếu bạn minh họa bằng một ví dụ. liên quan –

+0

PushState đẩy trạng thái mới trong ngăn xếp (trạng thái là một số dữ liệu được lưu trữ sau một hành động mới). Nó không có mối quan hệ với trở lại và đi. Quay lại và đi là các hàm để điều hướng qua các trạng thái được đẩy trong ngăn xếp. Tôi nói điều này bởi vì trong bản chỉnh sửa của bạn, có vẻ như bạn đang nghĩ rằng pushState và đi (1) là tương đương. –

Trả lời

6

Trạng thái là một số dữ liệu liên quan đến một trang (khi người dùng nhìn thấy nó trong trình duyệt). Nếu người dùng muốn ở trong một trang nhất định, trang này giống nhau, hoặc nếu anh ta đến từ nút nhấp chuột sau hoặc nhấp vào nút chuyển tiếp, như tôi nghĩ.

PushState đẩy trạng thái mới trong ngăn xếp. Nó không có mối quan hệ với backgo. Backgo là các chức năng để điều hướng qua các trạng thái được đẩy trong ngăn xếp. Tôi nói điều này bởi vì trong bản chỉnh sửa của bạn, có vẻ như bạn đang nghĩ rằng pushState và đi (1) là tương đương.

Có thể nếu bạn muốn biết người dùng đang đến từ hướng nào, bạn nên phân tích sự kiện onstatechange để biết liệu có tham số nào lưu trữ hướng hay không. Tôi vẫn không biết phải làm thế nào.

Điều chính tôi nghĩ, là nó không có mối quan hệ với việc đi (-1) hoặc go(1) hoặc back.

+0

Tôi nhận ra rằng 'pushState' và' go (1) 'arent the giống như một ví dụ. Thật không may có thực sự là không có mối quan hệ, hoặc liên kết để làm những gì im tìm kiếm, vì vậy tôi phải làm một cái gì đó giống như những gì @adeneo nói – Ascherer

-1

Có thể điều này sẽ phù hợp với bạn.

<html> 
<body onunload="disableBackButton()"> 
<h1>You should not come back to this page</h1> 
</body> 
<script> 
function disableBackButton() 
{ 
    window.history.forward(); 
} 
setTimeout("disableBackButton()", 0); 
</script> 
</html> 

Đoạn mã trên sẽ khiến bạn khó sử dụng nút quay lại để tải trang này.

Lần thử thứ hai

Mã bên dưới được lấy từ một ngăn xếp ngăn xếp khác.

detect back button click in browser

window.onload = function() { 
if (typeof history.pushState === "function") { 
    history.pushState("jibberish", null, null); 
    window.onpopstate = function() { 
     history.pushState('newjibberish', null, null); 
     // Handle the back (or forward) buttons here 
     // Will NOT handle refresh, use onbeforeunload for this. 
    }; 
} 
else { 
    var ignoreHashChange = true; 
    window.onhashchange = function() { 
     if (!ignoreHashChange) { 
      ignoreHashChange = true; 
      window.location.hash = Math.random(); 
      // Detect and redirect change here 
      // Works in older FF and IE9 
      // * it does mess with your hash symbol (anchor?) pound sign 
      // delimiter on the end of the URL 
     } 
     else { 
      ignoreHashChange = false; 
     } 
    }; 
} 

}

+0

Không cố gắng để vô hiệu hóa backbutton – Ascherer

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