Autor Zpráva
suvel
Profil
Zdá se, že při přepínání mezi záložkami okna nastanou problémy s intervaly. Ilustrační skript:
<div id="vypis1"></div>
<script>
function vypis(krok) {
  interval = setInterval(function(){
    document.getElementById("vypis1").innerHTML = krok;
    krok--;
    if(krok == 0) { 
      clearInterval(interval);
    }
  },200);  
}
function test() {
  vypis(10);
  setTimeout(test,4000);
}

test();
</script>

Skript opakovaně vypisuje čísla od 10 do 1. Nicméně, když se přepnu do jiné záložky (nedělá to vždy, ale stačí záložky chvíli přepínat), výpis se úplně zblázní - viz Živá ukázka

Co se děle? A lze to nějak ošetřit? Díky předem za jakýkoli postřeh.


Ještě doplňuji: Zkoušel jsem to v Chrome, Mozille, Oprře, Edge a IE11, zlobí to všude, pouze Opera a IE11 se kupodivu chovají ke skriptu slušně, ať přepínám, jak přepínám...
Chamurappi
Profil
Reaguji na suvela:
Je to úmyslná vlastnost – neaktivním tabům (nebo minimalizovanému oknu) se prodlužuje minimální délka časovaných události na jednu sekundu, aby zbytečně nezatěžovaly systém. Je to velmi rozumné opatření proti nerozumným webům. Vesměs nikdy není nutné provádět v neaktivní stránce úkony častěji než jednou za sekundu. Pokud si myslíš, že to potřebuješ, děláš něco špatně.
suvel
Profil
Chamurappi:
OK, děkuji za vysvětlení. Ale navíc se zdá, že po deaktivaci tabu už nefunguje clearInterval... Ve skriptu je podmínka, která by i po prodloužení intervalu měla interval zrušit. Což se evidentně nestane.
Chamurappi
Profil
Reaguji na suvela:
Máš svůj pokus špatně navržený.
To, že se 200 ms protáhne na jednu sekundu, neznamená, že se i 4000 ms protáhnou na pětinásobek. Pracuješ s jednou globální proměnnou interval, takže při druhém zavolání ji přepíšeš, dřív, než došlo ke clearIntervalu.

Na clearInterval se samozřejmě spolehnout dá.
KryVosa
Profil
Ještě doplňková otázka: Probíhají smyčky (for, while) i při deaktivaci tabu?
Zkoušel jsem to zde, ale uspokojivé výsledky jsem nedostal...
suvel
Profil
Chamurappi:
Aha, no jo :-)
Dík
Keeehi
Profil
Ono taky bude záležet na tom, jak dlouho bude záložka neaktivní a kolik bude dalších. Chrome zkouší zabíjení těch neaktivních.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0