ugrás a tartalomhoz

scriptek mobilon

aeternum · 2010. Júl. 11. (V), 22.01
Sziasztok!

Mobilra próbálok fejleszteni egy alkalmazást, HTML, php, JavaScript megoldásokkal.
Windows Mobile 5-ös emulátorral tesztelem.

És azt vettem észre, hogy ez a fajta js megoldás { setInterval(updateclock(),1000); } nem akar működni.

Már a megjelenítése is gond volt. Eredetileg <span>-ban volt, aztán áttettem <iframe>-be, <ilayer>-be, <div>-be, de meg se nyikkant.
Most egy <td id="clock"> cellában van és az emulátoron, IE alatt megjelenik ugyan a beolvasáskori aktuális idő, de aztán a másodpercvek csak nem akarnak pörögni.
Miért? AJAX a lalke?
De ha még ezt se tudja, akkor ajaxot vagy bármilyen js library-t hogyan? Vagy az teljesen más tészta és menjek el jquery vagy prototype irányba?

Érdekes számomra, hogy a TODAY változót pedig azonnal kiírta, nem kellett vele agyalni...

<head>
<script language="JavaScript" type="text/javascript">
  var d=new Date();
  var monthname=new Array("Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December");

  var dayname=new Array("Vasárnap","hétf&otilde;","kedd","szerda","csütörtök","péntek","szombat");

  var TODAY =  d.getFullYear() + ". " + monthname[d.getMonth()] +  " " + d.getDate() + ".           " + dayname[d.getDay()]+"&nbsp;&nbsp;";


 function updateClock ( ){
  var currentTime = new Date ( );
  var currentHours = currentTime.getHours ( );
  var currentMinutes = currentTime.getMinutes ( );
  var currentSeconds = currentTime.getSeconds ( );

  currentMinutes = ( currentMinutes < 10 ? "0" : "" ) + currentMinutes;
  currentSeconds = ( currentSeconds < 10 ? "0" : "" ) + currentSeconds;

  var currentTimeString = currentHours + ":" + currentMinutes + ":" + currentSeconds;
  document.getElementById("clock").innerHTML = currentTimeString;
 }

</script>
</head>


<body bgcolor="#C0DFFD" onload="updateClock(); setInterval('updateClock()', 500);">


  <tr bgcolor="#CCFF99">
  	<td colspan="6" align="center" style=" font-size:8px; font-weight:bold;">
	  <script language="javascript" type="text/javascript">
	    document.write(TODAY);
	  </script>
    </td>
	<td>&nbsp;</td>
	<td bordercolor="#000000" id="clock" name="clock">
	  <script language="javascript" type="text/javascript">
	    updateClock(); setInterval('updateClock()', 500);
	  </script>
	</td>	

  </tr>
 
1

A setInterval() függvényt vár első paraméterként

Endyl · 2010. Júl. 11. (V), 22.52
Szóval így kéne kinéznie a setInterval hívásodnak:
updateClock();
setInterval(updateClock, 500);
Elvileg lehet stringet is, de az nem javasolt.

A script tageket szedd ki a cellákból, és az onload attribútum helyett is inkább tegyél egy eseményfigyelőt a window-ra, load eseményt figyelve, és onnan indítsd a kódod.
2

HTML

Poetro · 2010. Júl. 11. (V), 23.19
És persze az se elhanyagolandó, hogyha a HTML-ed szabványos. És persze érdemes lehet kipróbálni az egészet Internet Explorer akármelyik változatában, de a legjobb, ha IE 5-6-os verzióval próbálkozol.
Ami legfontosabb hiba, hogy anélkül állítod az innerHTML-t, hogy biztos lennél benne, hogy az elem létezik. Másodsorban, az sem biztos, hogy létezik innerHTML az adott motorban, érdemes lehet hagyományos DOM függvényekkel csinálni.

Imhol egy működő példa:

<!DOCTYPE HTML>
<html lang="hu">
<head>
  <meta charset="UTF-8">
  <title></title>
  <script type="text/javascript">
    (function (window) {
      var d = new Date(),
          monthname = [
            "Január",
            "Február",
            "Március",
            "Április",
            "Május",
            "Június",
            "Július",
            "Augusztus",
            "Szeptember",
            "Október",
            "November",
            "December"
          ],
          dayname = [
            "vasárnap",
            "hétfő",
            "kedd",
            "szerda",
            "csütörtök",
            "péntek",
            "szombat"
          ],
          zeroFill = function (str, length) {
            str = String(str);
            length = length || 2;
            while (str.length < length) {
              str = '0' + str;
            }
            return str;
          },
          updateClock = function () {
            var d = new Date(),
                h = zeroFill(d.getHours()),
                m = zeroFill(d.getMinutes()),
                s = zeroFill(d.getSeconds()),
                el = document.getElementById('clock'),
                children = el && el.childNodes,
                i, l;

            if (children) {
              for (i = 0, l = children.length; i < l; i += 1) {
                el.removeChild(children[i]);
              }
              el.appendChild(document.createTextNode(h + ':' + m + ':' + s));
            }
          };

      window.today = d.getFullYear() + '. ' +
                      monthname[d.getMonth()] + ' ' +
                      d.getDate() + '. ' + dayname[d.getDay()];


      window.setInterval(updateClock, 500);
    }(this));

  </script>
</head>
<body>
  <div id="today">
    <script type="text/javascript">document.write(today);</script>
  </div>
  <div id="clock"></div>
</body>
</html>
3

desktopon működik is,

aeternum · 2010. Júl. 12. (H), 04.26
ahogy gondoltam és várható volt. Hála és köszönet érte!


De az emulátorban meghasalt. A <div>-ek helyén egy szép "[object]" kiírás van.
Ez attól van, hogy nem a "hagyományos" js kódolást alkalmaztad? Vagy, ezt a -számomra- új kódolást már az IE5 idején is lehetett volna haszálni?

Arra gondoltam, hogy az emulátorba berakom a legújabb mini Operát. Sikerült is...
úgy böngszek vele, hogy csak na! Csak az a na ne volna, mert a localhost-ra nem hajlandó rápislogni. Egyébként bármit lehet rajta nézni. csak localhost-ot nem.

Most stróbálom a Fennec-et tisztába tenni..
:)
4

A <div>-ek helyén egy szép

Poetro · 2010. Júl. 12. (H), 08.37
A <div>-ek helyén egy szép "[object]" kiírás van.

Ezt részleteznéd?
Ez attól van, hogy nem a "hagyományos" js kódolást alkalmaztad?

Mi az, hogy nem a hagyományos kódolást? Ez a kódolás teljesen hagyományos, elvégre IE5 is érti, ami már több mint 10 éves, ami a számítástechnika világában már vehető hagyományosnak.

Mondjuk nem tudom, miért pont Windows Mobile 5 emulátorral próbálkozol, nem tudom, hol találsz még 4-5 éves mobiltelefonokat, elvégre a Windows Mobile 5 2005-ben jelent meg. Érdemesebb lenne a WM6 illetve 6.5-tel kísérletezgetni, elvégre azok jóval aktuálisabb telefonok, ugyanis a WM6 2007-ben, a WM6.5 pedig 2009-es, persze csak ha mindenképpen a WM a célplatform.
5

hagyományos

aeternum · 2010. Júl. 12. (H), 14.15
Számomra még az a script szintatktika, hogy
változók
fügvények

Ezzel szemben a Te megfogalmazásod egyetlen zárójelbe tesz bele mindent. Nekem ez új. Pontosabban egy olyan programozástechnikai tudás áll mögötte, amit nem ismerek és nem tudom beazonosítani.
Nem tudok így gondolkodni, bár úgy tűnik, hatékonyabb.


WM5, WM6
Nem cél. Sem a platform, sem a verzió. DE. Én P3-as, 900MHz, 1GB Ram-os géppel dolgozom.
Megvan az előnye, megvan a hátránya.
Előny az, hogy rá vagyok kényszerítve az egyszerű és gyors megoldásokra, a hátrány, az összes többi!
:)

Föltettem a WM6-ot. Háromszor annyi ideig indul el csak az emulátor- az adatcseréről ne is beszéljünk!-, és nem látja a localhostot. Saját IE-vel sem.
A WM5 legalább azt látja. De nagyon szívesen kipróbálom más emulátorral, ami még ép ésszel elindul ezen a gépen.

Ha tudsz, légyszi , ajánl valamit.
:)

Köszi!
:)
6

JavaScript

Poetro · 2010. Júl. 12. (H), 16.08
Amennyiben érdekel a JavaScript, és hogy miért úgy írtam a kódot, ahogy, nézd meg Douglas Crocford videóját, és a kapcsolódó videókat.
Amennyiben nem éri el a localhostot, akkor rakd fel online, és teszteld ott.
7

localhost mobilon

solkprog · 2010. Júl. 12. (H), 16.32
Tipp: nézd meg az ip-d (pl. itt) és azt írd be az emulátorban lévő böngészőbe. (ha még nem próbáltad volna)
8

webserver

Ifju · 2010. Júl. 12. (H), 17.17
Esetleg egy webserver nevet, ha mondanál, az lehet megvilágítana még pár dolgot. :)
9

Van Opera Mobile emulátor is

Baldric · 2010. Júl. 13. (K), 06.32
Van Opera Mobile emulátor is (a mini nem futtat js-t a hagyományos értelemben), nem tudom ez mennyiben segít, de mivel használható vele a Dragonfly, talán hasznos lehet: The Opera Mobile emulator: Mobile development from the comfort of your desktop