2012-08-07 22 views
8

Ho fatto una semplice funzione che fa si che tutti i contenitori si comportino come link (elemento "a").Il pulsante Indietro non funziona dopo window.location.replace (href);

function allHot(element){ 
$(element) 
.click(
    function(){ 
    var href = $(this).find('a').attr('href'); 
    window.location.replace(href); 
}) 

.hover(
    function(){ 
    $(this).css({'text-shadow' : '0px 1px 0px #D6D6D6'}); 
    }, 
    function(){ 
    $(this).css({'text-shadow' : 'none'}); 
    } 

); 
} 

La funzione funziona alla grande. Invece di fare clic sul pulsante "altro", l'utente può fare clic ovunque sul contenitore e viene correttamente reindirizzato.

Tuttavia, se l'utente dopo il reindirizzamento fa clic sul pulsante, il browser torna indietro di due passaggi anziché uno come dovrebbe. Cosa c'è di più strano, la storia sembra OK.

schema semplice per una migliore descrizione:

Pagina1 -> Pagina2

Pagina2 [utente fa clic su "allHot" contenitore] -> allHot reindirizza al Pagina3

Pagina3 [utente fa clic sul navigatore pulsante indietro] -> Page1

Questo è un grosso problema per il sito Web su cui sto lavorando proprio ora. Non ho davvero la minima idea di impedirlo. Bug testato su Firefox, Chrome e Opera.

Testato anche su Opera "nessuna modalità javascript". Se javascript è disabilitato, il problema non si verifica.

Grazie in anticipo per qualsiasi indizio o soluzione.

risposta

28

Invece di usare replace, utilizzare il seguente:

window.location.href = '' 
+4

Così semplice, funziona come un fascino. Molto apprezzato. – sznowicki

+1

Nota. Se sei come me e scopri che il pulsante Indietro non funziona ancora dopo il reindirizzamento come menzionato sopra, assicurati di utilizzare l'URL completo ad es. 'Http: // www.example.com/endpoint'. L'utilizzo di solo '/ endpoint' non funzionava ancora. – zafrani

1

aggiunta alla risposta di Marcok.

Quando si utilizza replace si sta sostituendo lo stato della cronologia in modo da non spingere uno stato in più nella cronologia.

Se si dispone quanto segue:

Page1 a State1

Page2 a State2

e quindi si utilizza sostituire sarete sostituendo Page3-State2.

Quando si preme il pulsante Indietro, si passa da State2 a State1 ed è per questo che si sta andando a Page1.

Quando si utilizza window.location.href si aggiunge un altro stato in modo Page3 verrà impostato State3 e quando si fa clic sul pulsante Indietro si andrà a State2 che vanta Page2 come URL.

Problemi correlati