Ho un timer che conta alla rovescia ogni secondo. Funziona benissimo finché l'utente non apre 3 o 4 schede del mio sito, a quel punto il timer della scheda più recente va a velocità doppia o tripla. Attualmente posso riprodurre il bug solo in IE8. In precedenza utilizzavo setInterval e potevo riprodurre il bug anche in Firefox.Perché il mio setTimeout si accelera quando sono aperte più schede sul mio sito?
Attualmente sto usando FBJS (Javascript di Facebook), quindi mi limiterò a dare qualche pseudocodice.
function countDown() {
...
setTimeout(function() { countDown() }, 1000);
}
countDown();
Tuttavia, quello che sto veramente cercando è più teorico. So che i browser possono provare a giocare "catch up" con setInterval, ma in che modo più schede possono causare questo comportamento per setTimeout?
Wow, dare le funzioni nomi randomizzati ha fatto il trucco! Com'è possibile che JavaScript in finestre diverse possa influenzarsi a vicenda? – lamplighter
Bizzarro, non è vero? Immagino che debba essere qualcosa come stavo dicendo, "levigando" il codice da qualche parte nelle viscere del browser, identificando le funzioni solo per nome (beh, probabilmente per nome + sito) e non differenziando tra schede/finestre diverse. Potrebbe valere un bug report da qualche parte, davvero. – chaos
Questa potrebbe essere una soluzione alternativa senza PHP: http://stackoverflow.com/questions/6112671/settimeout-speeds-up-with-multiple-tabs/6112864#6112864 – namuol