8

Come il titolo dice, mi piacerebbe essere in grado di eseguire un diverso evento onstatechange se viene chiamata la funzione pushState, anziché la funzione back. Oppure, se la funzione go è negativa o positiva.C'è un modo per dire quale direzione sta andando lo stato con history.js?

Esempio:

se History.pushState() o History.go(1) sono chiamati, voglio callback dell'evento statechange di essere forwardPushState

se History.back() o History.go(-1) sono chiamati, voglio callback dell'evento statechange di essere backwardsPushState

+1

tenere traccia di all'ultima pagina visitata, se la pagina corrente reindirizza all'ultima pagina visitata, è probabile che la direzione è indietro. – adeneo

+0

Sarà meglio illustrare con un esempio. saluti –

+0

PushState inserisce un nuovo stato nello stack (uno stato è alcuni dati memorizzati dopo una nuova azione). Non ha alcuna relazione con la schiena e via. Indietro e vai sono le funzioni per navigare negli stati spinti nello stack. Dico questo perché nella tua modifica sembra che tu stia pensando che pushState e go (1) siano equivalenti. –

risposta

6

Uno stato è alcuni dati relativi a una pagina (come l'utente lo vede nel browser). Se l'utente desidera essere in una determinata pagina, questa pagina è la stessa, sia che provenga dal clic sul pulsante Indietro o dal clic del pulsante Avanti, come penso.

PushState inserisce un nuovo stato nella pila. Non ha alcuna relazione con back e go. Back e go sono funzioni per spostarsi tra gli stati in pila nello stack. Dico questo perché nella tua modifica sembra che tu stia pensando che pushState e go (1) siano equivalenti.

Forse se si desidera sapere da quale direzione l'utente sta arrivando, è necessario analizzare l'evento onstatechange per sapere se sono necessari i parametri che memorizzano la direzione. Ancora non so come fare.

La cosa principale, penso, è che non ha alcuna relazione con il go (-1) o go(1) o back.

+0

mi rendo conto che 'pushState' e' go (1) 'non sono lo stesso, è solo un esempio. Sfortunatamente non c'è davvero alcuna relazione o collegamento per fare ciò che sto cercando, quindi devo fare qualcosa di simile a ciò che @adeneo ha detto – Ascherer

-1

Forse questo funzionerà per voi.

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

Il codice sopra renderà difficile utilizzare il pulsante Indietro per caricare questa pagina.

secondo tentativo

Il codice qui sotto è stata presa da un altro overflow dello stack.

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

Non provare a disabilitare il pulsante di risposta – Ascherer