Mam proste chronograf JavaScript, który wyświetla na pola formularza o nazwie „d2”, służy do sprawdzenia, jak długo ktoś nabiera robi konkretnego zadania:setTimeout nie działa, gdy okno traci fokus
var milisec=0
var seconds=0
var complemento1=""
document.form1.d2.value='00:00:00'
function display(){
if (milisec>=9){
milisec=0
seconds+=1
}
else{
milisec+=1
}
complemento1=complemento2=complemento3="";
if ((seconds%60)<10) complemento1="0";
if ((Math.floor(seconds/60)%60)<10) complemento2="0";
if ((Math.floor(seconds/3600))<10) complemento3="0";
document.form1.d2.value=complemento3+Math.floor(seconds/3600)+":"+complemento2+(Math.floor(seconds/60)%60)+":"+complemento1+(seconds%60)
setTimeout("display()",100)
}
Problem polega na tym, że gdy dana osoba otwiera nową kartę/używa innego programu, timer zatrzymuje się, a następnie wznawia działanie po ponownym ustawieniu okna (Korzystanie z Chrome). Ma najdziwniejsze zachowanie, ponieważ czasami działa, czasami nie.
Widziałem wiele postów, które wymagały skryptu do zatrzymania, gdy nie było fokusa, chcę dokładnie odwrotnie i szukałem przez ponad godzinę bez powodzenia. Twoja pomoc jest bardzo cenna!
nitpick: zmienić linię setTimeout do 'setTimeout (wyświetlacz, 100)' , nie używaj łańcuchów, ponieważ powoduje to dodatkową ocenę. – epascarello
możliwy duplikat [Jak mogę ustawić setInterval również, gdy karta jest nieaktywna w Chrome?] (Http://stackoverflow.com/questions/5927284/how-can-i-make-setinterval-also-work-when- a-tab-is-inactive-in-chrome) – epascarello
Chrome automatycznie blokuje limity czasu i interwały, gdy zakładka nie jest skupiona, i nie sądzę, żebyś mógł wymusić, by zrobił inaczej, ale możesz łatwo obliczyć i zrekompensować rozbieżności , zwłaszcza jeśli obliczasz czas. Zamiast zakładać, że Twój limit czasu zostanie uruchomiony w ciągu następnych 100ms, zapisz bieżący czas i porównaj go z czasem, w którym upłynął limit czasu. – Mahn