Behält der Browser den Überblick über aktive setInterval
y setTimeout
IDs? Oder ist es allein Sache des Entwicklers, den Überblick zu behalten?
Wenn ja, ist sie über die Stückliste zugänglich?
Behält der Browser den Überblick über aktive setInterval
y setTimeout
IDs? Oder ist es allein Sache des Entwicklers, den Überblick zu behalten?
Wenn ja, ist sie über die Stückliste zugänglich?
Es ist Sache des Entwicklers, den Überblick zu behalten. Sie können dies tun, indem Sie den von der Funktion setTimeout/setInterval zurückgegebenen Wert verwenden und diesen Wert an die Funktion clearTimeout/clearInterval übergeben - wie in anderen Antworten hier beschrieben.
Dies scheint daran zu liegen, dass jeder Browser die Verfolgung der Intervalle auf seine eigene Weise umsetzt.
Von w3.org/TR/2009/WD-html5-20090212/no.html (ein Entwurf, aber w3schools und http://w3.org/TR/Window erklären es fast genauso) - setTimeout und setInterval geben einen long zurück und clearTimeout/clearInterval akzeptieren einen long zum Suchen und Abbrechen
Sie können solche globalen Zeitgeber zur Verfolgung hinzufügen, indem Sie die setTimeout
/ seInterval
Funktionen. Als Bonus können Sie ganz einfach Code hinzufügen, wenn ein Timer gesetzt oder ausgelöst wird, Live-Timer oder ausgelöste Timer verfolgen, usw...
Zum Beispiel:
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".
Das könnte Sie interessieren, wenn Sie wissen wollen, wie der Timer von seinem Fenster "gemerkt" wird.
<!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>
Aktualisierung:
Zu dieser Frage gibt es 2 Aspekte.
Bei Nr. 1 (und später bei Nr. 2) kann ich nur vermuten, dass der Auftraggeber "werden sie verfolgt" im allgemeinen Sinne meint, weil er als Entwickler die Kontrolle über sie haben möchte.
Kurz gesagt, ja, sie werden nachverfolgt (wie @s_hewitt bemerkte, als long
Werte des Browsers) und sie können vom Entwickler verwaltet werden, indem er bei der Einrichtung einen Verweis auf die Zeitgeber beibehält.
Als Entwickler können Sie diese kontrollieren (z.B. stoppen), indem Sie ( clearInterval(handleRef) , oder clearTimeout(handleRef) )
Es gibt jedoch keinen Standard window.timers
oder eine ähnliche Sammlung, die Ihnen eine Liste der vorhandenen Zeitschaltuhren liefert - diese müssen Sie selbst pflegen, wenn Sie dies für nötig halten.
function startPolling(delay){
pollHandle = setInterval(doThis, delay);
}
function stopPolling(){
clearInterval(pollHandle);
}
function doThisIn30minUnlessStopped(){
timerHandle = setTimeout(doThisThing, 1800000);
}
function stop30minTimer(){
clearTimeout(timerHandle);
}
Sie müssen lediglich einen Variablenverweis auf Ihre Zeitschaltuhr erstellen und sie bei Bedarf mit ihrem Namen löschen.
Wenn Sie eine andere Seite laden, werden alle Timer automatisch vom Browser gelöscht, so dass Sie sich nicht mehr darum kümmern müssen, sie zu löschen, es sei denn, Sie wollen oder müssen es.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
2 Stimmen
Auch darauf hätte ich gerne eine gute Antwort; ich glaube, sie lautet "nein", aber ich habe das nie wirklich recherchiert.
1 Stimmen
Und selbst wenn sie irgendwie registriert würden, woher wüssten Sie, wer welcher ist? Nun, ich denke, wenn Sie wissen, dass es nur eine Zeitüberschreitung oder ein Intervall oder was auch immer gibt, brauchen Sie das nicht zu wissen.
0 Stimmen
Haha, du hast "BOM" statt DOM gesagt.
2 Stimmen
@Felix Ich glaube, er hat es ernst gemeint. BOM = "Browser Object Model" wie in der
window
,navigator
,opener
Typ-Objekte0 Stimmen
"Du hast 'Böhm' gesagt" - nein, warte, das war der Pink Panther ;)