2014-09-03 14 views
7

Sto lavorando con l'API History e utilizzo dello stato push e pop. Voglio interrompere l'evento popstate dallo sparare in alcuni scenari in cui sto aggiungendo l'hash all'URL. per esempio in alcuni casi al click di anchor si aggiunge # all'URL e popstate viene immediatamente attivato) Voglio evitare tutti gli scenari in cui # o #somehasvalue vengono aggiunti all'URL e interrompere l'attivazione di popstate. Sto mantenendo gli URL con i parametri di query e non ho nessuno scenario in cui ho bisogno che l'evento popstate si attivi con # nell'URL.interrompe l'attivazione di popstate su hashchange

Ecco il mio codice.

if (supportsHistoryApi()) { 

    window.onpopstate = function (event) { 
    var d = event.state || {state_param1: param1, state_param2: param2};      
    var pathName = window.location.pathname, 
     params = window.location.search; 

    loadData(event, pathName + params, d.state_param1, d.state_param2); 

} 

risposta

6

Per quanto ho trovato, non è possibile impedire al popstate di sparare sfortunatamente.

Quello che puoi fare è controllare l'oggetto event.state. Questo sarà nullo in una modifica hash. Quindi io suggerirei l'aggiunta di un

if(event.state === null) { 
    event.preventDefault(); 
    return false; 
} 

Per il tuo popstate gestore di eventi proprio all'inizio. Penso che sia il modo migliore per evitare l'attivazione del codice di gestione popstate dalla tua parte quando cambia l'hash, ma sarei interessato a sapere se ci sono altre soluzioni.

+0

Questo non funziona quando si ritorna alla prima pagina aperta. Perché quindi lo 'state' è anche' null', ma non ha ancora hashchange –