8

Zgodnie z tytułem, chciałbym móc wykonać inne zdarzenie onstatechange, jeśli wywoływana jest funkcja pushState, zamiast funkcji back. Lub, jeśli funkcja go jest ujemna lub dodatnia.Czy istnieje sposób na określenie kierunku, w jakim zmierza stan z plikiem history.js?

Przykład:

jeśli History.pushState() lub History.go(1) są nazywane, chcę zwrotna w statechange imprezy będzie forwardPushState

jeśli History.back() lub History.go(-1) są nazywane, chcę zwrotna w statechange imprezy będzie backwardsPushState

+1

Śledzić ostatniej odwiedzonej strony, jeśli bieżąca strona przekierowuje do ostatniej odwiedzonej strony, są szanse kierunek jest do tyłu. – adeneo

+0

Będzie lepiej, jeśli zilustrujesz na przykładzie. dotyczy –

+0

PushState przesuwa nowy stan w stosie (stan to niektóre dane przechowywane po nowej akcji). Nie ma związku z powrotem i odejść. Back and go to funkcje umożliwiające nawigację po stanach wypychanych w stosie. Mówię to, ponieważ w twojej edycji wygląda na to, że myślisz, że pushState i go (1) są równoważne. –

Odpowiedz

6

Stan to niektóre dane związane ze stroną (tak jak użytkownik widzi ją w przeglądarce). Jeśli użytkownik chce być na określonej stronie, ta strona jest taka sama, albo jeśli przychodzi z kliknięcia przycisku Wstecz lub z kliknięcia przycisku Dalej, tak jak myślę.

PushState przesuwa nowy stan na stosie. Nie ma związku z back i go. Back i go to funkcje służące do nawigowania po stanach wciśniętych w stosie. Mówię to, ponieważ w twojej edycji wygląda na to, że myślisz, że pushState i go (1) są równoważne.

Być może, jeśli chcesz wiedzieć, od którego kierunku nadchodzi użytkownik, powinieneś przeanalizować zdarzenie onstatechange, aby dowiedzieć się, czy wymaga on dowolnego parametru przechowującego kierunek. Nadal nie wiem, jak to zrobić.

Najważniejsze jest to, że nie ma żadnego związku z wersją (-1) lub go(1) lub back.

+0

Rozumiem, że 'pushState' i' go (1) 'nie są to samo, to tylko przykład. Niestety tak naprawdę nie ma związku lub łącza do zrobienia tego, co szukam, więc muszę zrobić coś takiego, co @adeneo powiedział – Ascherer

-1

Może to zadziała dla Ciebie.

<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> 

Powyższy kod utrudni korzystanie z przycisku Wstecz w celu załadowania tej strony.

Druga próba

Poniższy kod został pobrany z innego przelewu stosu.

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

Nie próbuje wyłączyć backbutton – Ascherer