Html Titel Zeit anzeigen

Der beschriebene Bug hat nichts mit deinem Problem zu tun.

Er bezieht sich auf die Argumente, die der Funktion im Timeout übergeben werden. FF übergibt von sich aus ein Argument "lateness", dass ist Differenz zwischen der Zeit, zu der die Funktion hätte aufgerufen werden müssen und der Zeit zu der die Funktion tatsächlich aufgerufen wurde.

Erwartet die Funktion nun Argumente, wird aber skriptseitig nicht immer mit all den erwarteten Argumenten versorgt, kann es zu Fehlverhalten kommen.

Beispiel: http://jsfiddle.net/stNCe/
Code:
function fx(parameter)
{
  alert(typeof parameter);
}
setTimeout(fx,1000);

Man sollte denken der alert() meldet "undefined"(fx() wird kein Argument übergeben), im FF meldet er aber "Number", denn der Funktion wurde intern das lateness-argument übergeben.

Resumee: Funktionen, die per setTimeout/setInterval aufgerufen werden, skriptseitig immer genau die Anzahl an Argumenten übergeben, welche von der Funktion erwartet werden.

Aber mit deinem Problem hat das nichts zu tun, denn die Funktion run() verarbeitet überhaupt keine Argumente.

Aber trotzdem, interessante Sache, war mir noch nicht bekannt.:)
 
  • Gefällt mir
Reaktionen: Joe
Ich glaube das es exakt das Timeout-Problem ist. Der Fehler ist das selbe wie wenn ich den Timeout auskommentiere es wird nur die die Zeit aus den php-echo angezeigt und bleibt stehen.

Ich wüsste gerne wie ich den typeof parameter prüfen kann? Wenn er Number ist dann setze halt Timeout nochmal.

Es handelt sich um eine tausendstel Sekunde Verzögerung während des Funktionsdurchlauf was offensichtlich des Lateness feuert. Folgendes klappt bisher und zeigt immer mal die Errormeldung:
HTML:
</script>

<p>Du bist noch <b><span id="countdown">0</span></b> min unterwegs.</p>
 
<script  type="text/javascript">
var anzahlAufrufe = 0;
 
(
  function(duration,node,action,delay)
  <!-- Code by Wollmaus @ www.tutorials.de -->
  {
    var end     = new Date(new Date().getTime()+(duration*1000)).getTime(),
        format  = function(i)
                  {
                    return((i<10)?'0'+i:i);
                  },
        run     = function()
                  {      
					
                    var now=new Date().getTime(),
                        diff=Math.floor((end-now)/1000),
                        hh=Math.floor(diff/3600),
                        mm=Math.floor((diff-(hh*3600))/60),
                        ss=diff%60;
                        
                        node.innerHTML  =
                        top.document.title  =
                        [hh,format(mm),format(ss)].join(':');

                          var secSince1970 = (new Date()).getTime();
                        if(diff<1)
                        {
                          action();
                          return;
                        }
                        //setTimeout(run,delay);
						
						var secSin2 = (new Date()).getTime();
						if(0<secSin2-secSince1970)
						{
							anzahlAufrufe++;
							document.getElementById('Focusoutpt').innerHTML = anzahlAufrufe +'SetTimeoutError';
							setTimeout(function(){run();},delay, null,null);
							//function(){location.href='main.php?section=erkunden';}

						}
						else {
							setTimeout(function(){run();},delay, null,null);
						}
						//focoActivo;
						//self.focus();
                    }
    run(); 
  }
)
(<?php echo $differenz = $ZeitEndeAktion - $timestamp2;?>, //Laufzeit in Sekunden
  document.getElementById('countdown'), //Zielelement
  function(){location.href='main.php?section=erkunden';}, //finale Funktion
  1000  //Intervall in Millisekunden
)

</script>
<p>Focustest <b><span id="Focusoutpt"></span></b></p>

Fragt man den Zeitunterschied auf grösser als 1 ab klappt es nicht und bleibt wieder stehen.

Finde das sehr intressant das es auf diese Tausendstel Sekunde ankommt. Normal würde man denken so ein Quatsch das feuert entweder immer oder garnicht aber meine Fehlermeldung erscheint so ca 1-2 mal. Das klappt sogar in minimiert Zustand. Eine Bugmeldung bei Mozilla beschreibt das es im minimierten Zustand des FF hängenbleibt. Mit meiner Funktion anscheinend nicht. -> Bis jetzt läuft es.
 
Man sollte denken der alert() meldet "undefined"(fx() wird kein Argument übergeben), im FF meldet er aber "Number", denn der Funktion wurde intern das lateness-argument übergeben.

Ich nehme stark an das jenes lateness-argument entweder zufällig oder mit der exakten verspäteten Zeit befüllt wird. Das kann dann bedeuten es handelt sich um 1ms und wenn ich richtig gelesen habe feuert das settimeout in den neueren Browsern erst ab 5ms. Genau dieses Verhalten könnte dazu führen das meine Zeit stehen bleibt als hätte ich das settimeout auskommentiert.

Habe versucht eine Variable mit den aktuellen Delay zu füllen also so:
Code:
var variable;
setTimeout(function(){run();},variable=delay, null);
Allerdings kommt es nicht zu Auswetung (if variable!=1000), wenn die Zeit hängen bleibt, warum auch immer.

Edit ich revidiere der Code oben stoopt auch wenn FF minimiert ist .. Ich gebs auf :(
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück