Toon posts:

[JS] [IE] [NS] timer compatibiliteitsprobleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo webbies :)

Een vriend van mij is bezig een online-spel te programmeren (scifi/strategy). Nou heeft hij een klein javascript probleempje dat zich niet voordoet in Netscape/Mozilla of Linuxbased webbrowsers. Alleen Microsoft heeft besloten dat scriptje niet mag werken.
offtopic:
sorry, flame weggehaald, ik vond het verhaal alleen te eng voor woorden brrrr


Het gaat om een timerscript dat vanaf het moment dat iemand is ingelogd begint te lopen. Tijdformaat is hh:mm:ss en begint natuurlijk netjes op 00:00:00.

in .js bestand gezetelde functie:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function uhr(ids)
{
  if (ids.length==0)
  {  //nichts zu tun
    window.clearInterval(clock_timmer);
    return;
  }
  var NowLocal = new Date();

  for (var i = 0 ; i < ids.length ; i++)
  {
    var time_str = document.getElementById(ids[i]).innerHTML;
      //Formatierung entvernen

    time_str = time_str.replace(/L:/,'');
    time_str = time_str.replace(/O:/,'');
    time_str = time_str.replace(/<br>/,':');
    time_str = time_str.replace(/&nbsp;/,'');
    time_str = time_str.replace(/&nbsp;/,'');


    time_str = time_str.replace(/[\n\s\r\v\t\r\f]/,"");
      //Zeit berechnen
    var time_array = time_str.split(":");
    time_str="";

    if (time_array.length != 6)
    {  //Online initialisieren
      var Online_time  = new Date();
      Online_time.setHours (0);
      Online_time.setMinutes (0);
      Online_time.setSeconds (0);
    }
    else
    {  //Eine Sekunde addieren
      var Online_time  = new Date();
       Online_time.setHours(eval(time_array[3]));
       Online_time.setMinutes(eval(time_array[4]));
       Online_time.setSeconds(eval(time_array[5])+1);
    }
      //Zeiten anzeigen
    time_str+= "L:&nbsp;";
    time_str+= leading_zero (NowLocal.getHours())+
     ":"+leading_zero (NowLocal.getMinutes())+
     ":"+leading_zero (NowLocal.getSeconds());
    time_str += ("<br>O:&nbsp;");
    time_str+= leading_zero (Online_time.getHours())+
     ":"+leading_zero (Online_time.getMinutes())+
     ":"+leading_zero (Online_time.getSeconds());
    document.getElementById(ids[i]).innerHTML = time_str;
  }
}



Deze functie wordt hier in de pagina opgeroepen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<body bgcolor="#FFFFFF" text="#000000">
<script type="text/javascript" src="./zeit.js"></script>

<div id="Timmer" style="position:absolute; top:56px; 
left:60px; text-align:left; font-size:12px;" 
title="Die locale Uhrzeit und die Onlinezeit"></div>


<script type="text/javascript" language="JavaScript">
  <!--
  //Timmer
  ids = new Array("Timmer");

  var clocktimmer = window.setInterval("uhr(ids)",1000);
  -->
</script>
</body>



(Die vriend van mij is een duitser trouwens ja :Y) )
Nou werkt dit dus altijd prima, geen probleem. Alleen bij IE (6 bij mij) werkt het dus niet, in zoverre, dat er wel netjes 00:00:00 staat. De timer loopt dus niet denk ik OF de tijd wordt niet ververst. Heeft iemand enig idee waarom dit in IE niet werkt?

[ Voor 30% gewijzigd door Verwijderd op 21-01-2004 14:49 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Waarom zo'n ranzig script voor zoiets simpels?

Ik pak er wel ff een voorbeeld bij. :)

[ Voor 33% gewijzigd door BtM909 op 21-01-2004 14:45 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
hier stond niks O-)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<html>
<head>
    <title>Untitled</title>
    <script language="JavaScript">
        var dtStart = new Date();

        function uhr() {
            var dtNow = new Date();
            var dtOnline = new Date((dtNow-dtStart)-3600000); //1 uurtje extra eraf... :?
            
            var time_str= "L:&nbsp;";
            time_str+= leading_zero (dtNow.getHours())+
                ":"+leading_zero (dtNow.getMinutes())+
                ":"+leading_zero (dtNow.getSeconds());
                time_str += ("<br>O:&nbsp;");
                time_str+= leading_zero (dtOnline.getHours())+
                ":"+leading_zero (dtOnline.getMinutes())+
                ":"+leading_zero (dtOnline.getSeconds());
    
            document.getElementById('Timmer').innerHTML = time_str;
        }

        function leading_zero(sNum) {
            sNum = '0' + sNum;
            return sNum.substr(sNum.length-2,2);
        }
    </script>
</head>

<body>
<body bgcolor="#FFFFFF" text="#000000">

<div id="Timmer" style="position:absolute; top:56px; 
left:60px; text-align:left; font-size:12px;" 
title="Die locale Uhrzeit und die Onlinezeit"></div>


<script type="text/javascript" language="JavaScript">
  <!--
  var clocktimmer = window.setInterval("uhr()",1000);
  -->
</script>
</body>



</body>
</html>

Werkt dit wel? (Effe voor het gemak in dezelfde HTM geplempt...)

...enne: waar blijf je BtM909 ?? ;)

[ Voor 214% gewijzigd door RobIII op 21-01-2004 15:42 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Ja die werkt prima! :) Is inderdaad een stuk eenvoudiger, alleen de leading_zero functie was niet nodig geweest :) Die vriend van mij heeft zelf een minder rekenkracht vergende functie daarvoor geschreven


code:
1
2
3
4
5
6
7
8
9
10
function leading_zero (value)
{
  value = eval(value);
  if (value<10)
    return "0"+value;
  else
    return value;

  return value;
}


andersom :)

Verwijderd

aargh, ik kan me niet voorstelklen dat een eval minder rekenkracht vergt, waarom doe je zoiets in godsnaam niet met een parseInt? dit is echt eng

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 21 januari 2004 @ 18:42:
aargh, ik kan me niet voorstelklen dat een eval minder rekenkracht vergt, waarom doe je zoiets in godsnaam niet met een parseInt? dit is echt eng
Zelfs omrekenen naar een int is in dit geval onzin. Gewoon een 0 ervoor plakken en de rechtse 2 tekens pakken lijkt me toch het snelst...

whatevah ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 11:43

crisp

Devver

Pixelated

de returnvalue van getSeconds() en getMinutes () is al integer, dus die discussie is helemaal overbodig ;)

trouwens, als het een string zou zijn dan nog gaat het goed:

JavaScript:
1
2
alert('8' < 10);  // true
alert('12' < 10);  // false


handig die automatische typecasting :)

[ Voor 47% gewijzigd door crisp op 21-01-2004 22:16 ]

Intentionally left blank

Pagina: 1