Tarayıcı, etkin setInterval
ve setTimeout
kimliklerinin kaydını tutuyor mu? Ya da sadece takip etmek için geliştirici bu kadar mı?Tarayıcı aktif zamanlayıcı kimliklerini takip ediyor mu?
Onları takip ederse, BOM üzerinden erişilebilir mi?
Tarayıcı, etkin setInterval
ve setTimeout
kimliklerinin kaydını tutuyor mu? Ya da sadece takip etmek için geliştirici bu kadar mı?Tarayıcı aktif zamanlayıcı kimliklerini takip ediyor mu?
Onları takip ederse, BOM üzerinden erişilebilir mi?
bunlara erişebilirsiniz her setTimeout kimliği hatırlıyordu iz. SetTimeout/setInterval işlevinin döndürülen değerini kullanarak ve bu değeri diğer yanıtlarda açıklandığı gibi clearTimeout/clearInterval işlevine geçirerek yapabilirsiniz.
Bu, her tarayıcının aralıkları kendi yollarıyla takip etmeyi uygulayacağı için görünmektedir.
w3.org/TR/2009/WD-html5-20090212/no adresinden.html (taslak, ama W3Schools ve http://w3.org/TR/Window bunu neredeyse aynı şekilde açıklamak) - setTimeout ve uzun ve clearTimeout/clearInterval bulup setTimeout
geçersiz kılarak
Güncelleme: Bu sorunun 2 yönü vardır
.
Ben sadece OP genel anlamda "onlar izlenir" anlamına geldiğini 1. (ve daha sonra # 2) için, çünkü bir Geliştirici s olarak tahmin/onlara üzerinde kontrol istiyorum yapabilirsiniz .
Kısacası, evet izlenirler (@s_hewitt'in tarayıcıya göre long
değerleri gibi) ve kurulum sırasında zamanlayıcılara bir referans vererek geliştiriciler tarafından yönetilebilirler. Eğer gerekir - Eğer arayarak onları kontrol (örn durdur) bir geliştirici (clearInterval(handleRef) veya clearTimeout(handleRef))
Ancak size mevcut zamanlayıcılar listesini verir varsayılan window.timers
veya benzeri koleksiyon bulunmadığından
İhtiyacınız olduğunu düşünüyorsanız kendinizi koruyun.
function startPolling(delay){
pollHandle = setInterval(doThis, delay);
}
function stopPolling(){
clearInterval(pollHandle);
}
function doThisIn30minUnlessStopped(){
timerHandle = setTimeout(doThisThing, 1800000);
}
function stop30minTimer(){
clearTimeout(timerHandle);
}
Sadece zamanlayıcınıza bir değişken referansı oluşturmanız ve gerekirse/gerekiyorsa adıyla temizlemeniz gerekir.
Başka bir sayfa yüklediğinizde, tüm zamanlayıcılar tarayıcı tarafından otomatik olarak temizlenir, böylece bir tanıtıcıyı tutmanıza ve ihtiyacınız/istemediğiniz sürece bunları temizlemenize gerek kalmaz.
Zamanlayıcı, pencere tarafından nasıl hatırlandığını merak ediyorsanız, bu sizi ilgilendirebilir. Aşağıdaki komut ile
<!doctype html>
<html lang= "en">
<head>
<meta charset= "utf-8">
<title>Timer </title>
</head>
<body>
<h1>Timers</h1>
<script>
if(!window.timers){
var timers= [], i= 0;
while(i<5){
timers.push(setInterval(function(){
if(confirm(timers.join('\n')+'\nRemove a timer?')){
clearInterval(timers.shift());
}
},
i*1000+1000));
++i;
}
}
</script>
</body>
</html>
Bak, tarayıcı O korumak için geliştirici için kadardır yineleme
for (i = 1; i <= d; i++) {
(function(j) {
var delay = j/d;
t[j] = setTimeout(function() {
elem.style.top = j+"px";
},delay);
})(i);
}
Sen
for (i in t) {
alert(t[i]);
}
Hem izleme Küresel zamanlayıcılar ekleyebilir iptal etmek uzun kabul dönmek SetInterval/seInterval
işlevleri.
timers = {}; // pending timers will be in this variable
originalSetTimeout = window.setTimeout;
// override `setTimeout` with a function that keeps track of all timers
window.setTimeout = function(fu, t) {
var id = originalSetTimeout(function() {
console.log(id+" has timed out");
delete timers[id]; // do not track popped timers
fu();
}, t);
// track this timer in the `timers` variable
timers[id] = {id:id, setAt: new Date(), timeout: t};
console.log(id+" has been set to pop in "+t+"ms");
}
// from this point onward all uses of setTimeout will be tracked, logged to console and pending timers will be kept in the global variable "timers".
Bunun için iyi bir cevap da görmek istiyorum: Bir zamanlayıcı ayarlamak veya uzattı zaman bir avantaj olarak kolayca Örneğin
... vb canlı sayaçları veya attı zamanlayıcılar izlemek, kod eklemek ; Sanırım "hayır" ama asla gerçekten araştırmamıştım. – Pointy
Bir şekilde onları kaydettirmiş olsa bile, hangisinin hangisinin olduğunu nasıl anlarsınız? Sanırım sadece bir zaman aşımı ya da aralığın olduğunu biliyorsan, bilmen gerekmiyor. – Pointy
Haha, DOM yerine "BOM" dedin. – Felix