Announcement

Collapse
No announcement yet.

Problem mit setInterval in Firefox und Opera

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit setInterval in Firefox und Opera

    Hallo zusammen!
    Ich habe hier ein kleines Problem...
    In einer externen Javascript-Datei habe ich folgende Variable definiert:
    Code:
    var Zeit = {
      Client: 0,
      Server: 0,
      Verschiebung: 0,
      UpdateInterval: null,
      SyncRequest: null,
      i: 0,
      init: function( timestamp ) {
        this.Client = Math.round(new Date().getTime()/1000);
        this.Server = timestamp;
        this.Verschiebung = this.Client - this.Server;
        this.UpdateInterval = setInterval( Zeit.update, 1000 );
      },
      update: function() {
        //console.log(Zeit.Server);
        Zeit.Server++;
        Zeit.Client++;
        Zeit.i++;
        if( Zeit.i == 300 ) { Zeit.i = 0; Zeit.sync(); }
      },
      sync: function() {
        this.SyncRequest = createAjaxRequestObj();
        this.SyncRequest.open('GET', 'atime.php', true );
        this.SyncRequest.onreadystatechange = function () { Zeit.syncHandler( Zeit.SyncRequest ) };
        this.SyncRequest.send( null );
      },
      syncHandler: function( request ) {
        if( request.readyState == 4 ) {
          if( request.status == 200 ) {
            response = eval("("+request.responseText+")");
            this.Client = Math.round(new Date().getTime()/1000);
            this.Server = response.time;
            this.Verschiebung = this.Client - this.Server;
          }
        }
      }
    };
    Damit soll die Client- und Serverzeit gespeichert und für weitere Berechnungen nutzbar gemacht werden.
    Das externe Skript wird im HTML normal eingebunden und ist auch verfügbar.
    Am Ende der HTML-Datei wird die Zeit-Zählung mit der Serverzeit angestossen:
    HTML Code:
    <script type="text/javascript">
      Zeit.init(<?=time()?>);
    </script>
    Das Ganze funktioniert im IE6 und 7 sowie in Safari/Webkit wunderbar, nur Opera und Firefox 3 verweigern. Dort wird Zeit.update() anscheinend nur einmal aufgerufen, zumindest laut Firebug-Konsolen-Log.
    Wird aber Zeit.init() mit einem beliebigen Timestamp von der Konsole aus gestartet funktioniert es wunderbar. Fehlermeldungen erscheinen weder im Firebug noch der Opera-Fehlerkonsole.

    Bin für jeden Hinweis dankbar!
    Gruß,
    Brezi

  • #2
    Ich würde bei setInterval das Zeit.update in Anführungszeichen setzen, sonst streikt ff3. Ich hatte mal folgendes problem:
    Code:
    var x = irgendwas;
    setTimeout(x,1000);
    was FF3 nicht akzeptiert hat. das musste dann
    Code:
    var x = irgendwas;
    setTimeout(''+x+'',1000);
    heißen. vllt löst das ja dein problem...

    Comment


    • #3
      das mit der konsole: Du rufst das sofort auf, wenn das dokument lädt... ich würde das mit onload oder mit einem SetTimeout lösen:
      Code:
      <script type="text/javascript">
        window.setTimeout('Zeit.init(<?=time()?>);',10);
      </script>
      die 10 ggf. anpassen, je nach zeit, die zum aufbauen des dokumentes gebraucht wird!

      Comment

      Working...
      X