Moin!
Folgende Funktion soll die Zeit sekündlich aktualisieren.
function sekZaehler(){
newTimestamp = newTimestamp + 1000;
setTimeout("sekZaehler()",1000)
}Im IE (5.5) und NS(7) funktioniert das auch wunderbar.
Bei Opera (7.11) zählt die Uhr ungenau, sprich es wird nicht sekündlich sondern nur alle 2-3 Sekunden aktualisiert.
Dann zwar auch um mehr als eine sek, so dass es so aussieht, als würde die Uhr noch richtig laufen aber eben nur jede 2 Sekunden aktualisieren, wenn man sie Seite dann allerdings ein paar min offen lässt, kann man schon einen deutlichen Unterschied feststellen.
Du solltest dich bei Javascript nicht auf den zeitlich korrekten Ablauf verlassen. Die Ausführungsgeschwindigkeit von Javascript ist in den einzelnen Browsern höchst unterschiedlich.
Dein Programm verläßt sich darauf, das zwischen dem Ablauf des Timeouts und dem Neustart des Timeouts genau 0,000 Millisekunden Zeit vergehen - das Javascript also praktisch in Nullzeit ausgeführt wird. Das ist natürlich nicht so. Funktionsaufrufe benötigen Zeit. Folglich geht deine selbstgebaute Uhr auf Dauer immer falscher. Bei Opera kommt dies nur am deutlichsten zum Vorschein.
Der Gedanke, die Serveruhrzeit als Maßstab zu nehmen, ist dabei ja grundsätzlich nicht verkehrt. Nutze aber ebenso die Tatsache, dass jeder Rechner über eine gut funktionierende, zumindest die Sekunden zuverlässig zählende Uhr verfügt. Beim Seitenladen weißt du durch PHP die Serverzeit und stellst mit Javascript die Differenz zur Client-Zeit fest. Jede Sekunde gibst du dann die Client-Zeit, korrigiert um die Server-Differenz, aus - und schon mußt du dir um unregelmäßige Zeitaufrufe keine Gedanken mehr machen.
Das Delay bei der Anzeige im Opera dürfte übrigens einfach daher rühren, dass er nicht 100% regelmäßig die Anzeige aktualisiert. Wenngleich ich sowas bei Opera noch nicht wirklich erlebt habe, so dürfte die Funktion dennoch ordnungsgemäß aufgerufen werden - denn ansonsten würde die Uhr alle zwei Sekunden nur um eine Sekunde hochgezählt werden.
- Sven Rautenberg
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|