2010-05-11 23 views
17

क्या ब्राउज़र सक्रिय setInterval और setTimeout आईडी का ट्रैक रखता है? या यह ट्रैक रखने के लिए डेवलपर तक पूरी तरह से है?क्या ब्राउज़र सक्रिय टाइमर आईडी का ट्रैक रखता है?

यदि यह उनका ट्रैक रखता है, तो क्या यह बीओएम के माध्यम से सुलभ है?

+2

मैं इस के लिए एक अच्छा जवाब भी देखना चाहेंगे ; मुझे लगता है कि यह "नहीं" है लेकिन मैंने कभी इसका शोध नहीं किया है। – Pointy

+1

वैसे भी अगर यह किसी भी तरह से उन्हें पंजीकृत करता है, तो आप कैसे जानेंगे कि कौन सा है? खैर मुझे लगता है कि अगर आपको पता है कि सिर्फ एक टाइमआउट या अंतराल या जो कुछ भी है, तो आपको यह जानने की आवश्यकता नहीं होगी। – Pointy

+0

हाहा, आपने डोम के बजाय "बीओएम" कहा था। – Felix

उत्तर

4

उपयोग कर सकते हैं याद कर सकता है यह डेवलपर रखने के लिए के लिए है ट्रैक का। आप setTimeout/setInterval फ़ंक्शन के लौटे हुए मान का उपयोग कर ऐसा कर सकते हैं और उस मान को clearTimeout/clearInterval फ़ंक्शन पर पास कर सकते हैं - जैसा कि यहां अन्य उत्तरों में वर्णित है।

ऐसा प्रतीत होता है क्योंकि प्रत्येक ब्राउज़र अंतराल के ट्रैक को अपने तरीके से ट्रैक करने के लिए लागू करेगा।

w3.org/TR/2009/WD-html5-20090212/no से।एचटीएमएल (एक मसौदा है, लेकिन w3schools और http://w3.org/TR/Window यह लगभग उसी तरह की व्याख्या) - setTimeout और वापसी एक लंबी और clearTimeout/clearInterval एक लंबे स्वीकार खोजने के लिए और रद्द

0

अद्यतन:

इस सवाल का 2 पहलुओं रहे हैं।

  1. क्या ब्राउज़र टाइमर आईडी का ट्रैक रखता है?
  2. हैं वे सुलभ

मैं सिर्फ इसलिए एक डेवलपर रों रूप में # 1 (और बाद में # 2) कि ओ पी का मतलब सामान्य अर्थ में "वे पता लगाया जाता है" के लिए अनुमान/वह उन पर नियंत्रण चाहते हैं कर सकते हैं ।

संक्षेप में, हां उन्हें ट्रैक किया जाता है (जैसा कि @s_hewitt ने देखा है, long ब्राउज़र द्वारा मूल्यों के रूप में) और सेटअप के दौरान टाइमर के संदर्भ को बनाए रखने के द्वारा डेवलपर द्वारा प्रबंधित किया जा सकता है।

एक डेवलपर आपको कॉल करके नियंत्रित कर सकते हैं (उदाहरण के लिए बंद) उन्हें (clearInterval(handleRef), या clearTimeout(handleRef))

लेकिन वहाँ कोई डिफ़ॉल्ट window.timers या इसी तरह के संग्रह है कि आप मौजूदा टाइमर की एक सूची देता है के रूप में - आप की आवश्यकता होगी अगर आपको लगता है कि आपको जरूरत है तो खुद को बनाए रखें।

function startPolling(delay){ 
    pollHandle = setInterval(doThis, delay); 
} 
function stopPolling(){ 
    clearInterval(pollHandle); 
} 

function doThisIn30minUnlessStopped(){ 
    timerHandle = setTimeout(doThisThing, 1800000); 
} 
function stop30minTimer(){ 
    clearTimeout(timerHandle); 
}  

आप बस अपनी घड़ी को एक चर संदर्भ बनाने के लिए/जब जरूरत है, स्पष्ट यह नाम से की जरूरत है, और।

जब आप कोई अन्य पृष्ठ लोड करते हैं, तो सभी टाइमर स्वचालित रूप से ब्राउज़र द्वारा साफ़ किए जाते हैं, इसलिए आपको एक हैंडल बनाए रखने की आवश्यकता नहीं होती है, और जब तक आपको आवश्यकता नहीं होती तब तक साफ़ करें।

+2

उह ... मेरे पास बहुत कुछ है इसके बारे में गंभीर संदेह ... – Pointy

+0

निश्चित रूप से काम करता है, मैंने इसे 10 से अधिक वर्षों से उपयोग किया है। – scunliffe

+2

यह काम करता है, लेकिन मैं ऑब्जेक्ट "clearTimeout ('timerHandle')" ऑब्जेक्ट के नाम के बजाय "clearTimeout (timerHandle)" ऑब्जेक्ट पास करता हूं। जांच नहीं की है कि पसंदीदा तरीका कौन सा है। –

1

यदि आप इस विंडो के बारे में उत्सुक हैं कि टाइमर को उसकी खिड़की से 'याद' कैसे किया जाता है, तो यह आपकी रूचि रख सकता है। नीचे स्क्रिप्ट पर

<!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> 
0

देखो, ब्राउज़र प्रत्येक setTimeout की आईडी यात्रा

for (i = 1; i <= d; i++) { 
      (function(j) { 
       var delay = j/d; 
       t[j] = setTimeout(function() {  
         elem.style.top = j+"px"; 
        },delay); 

      })(i);   
} 

आप उनके द्वारा

for (i in t) { 
     alert(t[i]); 
} 
4

आप पर नज़र रखने के इस तरह के वैश्विक टाइमर जोड़ सकते हैं setTimeout अधिभावी द्वारा करने के लिए setInterval/seInterval फ़ंक्शंस। एक बोनस के रूप आप आसानी से जब एक टाइमर सेट या पॉपअप है कोड जोड़ सकते हैं, लाइव टाइमर या पॉपअप टाइमर, आदि को ट्रैक ...

उदाहरण के लिए:

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".