2015-08-06 15 views
7

Ho una funzione in cui si scorre verso la pagina in alto quando la pagina viene caricata con document.ready(). Tuttavia in Chrome questa funzione viene eseguita solo quando sono nella pagina e la aggiorno.Funzione JQuery attiva in safari ma non in chrome

Se accedo alla pagina digitando il collegamento nella barra degli indirizzi, la funzione non viene eseguita. Se accedo alla pagina da un collegamento da un'altra pagina, anche questa non viene eseguita. L'unico modo in cui viene eseguito il 100% delle volte in Chrome è se sono nella pagina e lo aggiorno.

Tuttavia, in Safari, la funzione viene eseguita al 100% ogni volta accedendo alla pagina da un collegamento, digitandola nella barra degli indirizzi, in modalità di ricarica.

Questo è il mio codice:

jQuery(document).ready(function($) { 
    if (location.hash) {    // do the test straight away 
      window.scrollTo(0, 0);   // execute it straight away 
      setTimeout(function() { 
       window.scrollTo(0, 0);  // run it a bit later also for browser compatibility 
      }, 1); 
      //location.reload(); 
     } 
}); 

Questo in realtà funziona anche in Safari senza metterlo in document.ready() ma poi di nuovo non in Chrome.

Qualcuno sa che cosa causa questo e se questo è possibile risolvere? Ho già avuto questo problema ed è stato estremamente frustrante.

+5

Come sarebbe la pagina non essere in cima già quando si passa direttamente alla pagina digitando l'url, ecc? –

+1

Potrebbe esserci un'ancora (#) nell'URL, credo. –

+0

Qual è esattamente il problema? Non hai spiegato il comportamento che vedi o come sai che la funzione non viene eseguita. – charlietfl

risposta

1

Basta aumentare il tempo di ritardo setTimeout di 20 ms o più di 20 ms, potrebbe essere perché 1 ms è un intervallo di tempo troppo breve.

$(document).ready(function() { 
if (location.hash) {   
      window.scrollTo(0, 0); 
      setTimeout(function() {window.scrollTo(0, 0);}, 20); 
} 
}); 
+0

Il minimo che posso fare, mentre farlo funzionare è 200ms. Tuttavia, quando uso (window) .load, posso persino ridurlo a 115ms mentre lavoro, ma ancora da nessuna parte vicino a 20ms. Non appena avrò un valore inferiore a 115 ms, non funzionerò tutte le volte e quando lo imposto a 20 ms, ignora semplicemente la finestra.ScrollTo() ma è ancora in grado di attivare i registri e gli avvisi della console. – Noob17

+0

L'utilizzo di timeout con magia "questo numero fa funzionare" i valori è un odore di codice. Meglio continuare a scavare per capire il problema. Se non riesci assolutamente a farlo funzionare senza un numero magico, assicurati di documentarlo chiaramente in un commento. – Palpatim

+0

Scusa, ho smesso di provare a farlo in questo modo e ho deciso in un altro modo, tagliando completamente la funzione setTimeOut() perché era troppo coerente in un browser diverso, grazie per l'aiuto alle persone. – Noob17

Problemi correlati