Magyar Opera

Javascript és AJAX támogatás az Opera Miniben

Ebben a cikkben az Opera Mini 4 Javascript támogatásáról lesz szó, így inkább technikai jellegű. Ha az Opera Mini újdonságai és funkciói érdekelnek, ezt olvasd el.

Az Opera Mini egyszerű, de nagyon hatékony koncepciót használ a weblapok megnyitására, ezért lehetséges, hogy pár ezer forintos, régi telefonokon is képes futni és megjeleníteni szinte a teljes webet. A módszer lényege abból áll, hogy amikor meg akarunk nyitni egy weblapot az Opera Miniben, az küld egy kérést az Opera központi szerverére. A szerver letölti a kért weblapot, és átalakítja OBML (Opera Binary Markup Language) formátumra, amely egy speciális, az eredeti weblap méretéhez képest akár 90%-kal tömörített csomag, majd ezt visszaküldi a telefonnak. Fontos még tudni, hogy a telefon és a szerver között a kapcsolat mindig biztonságos, mind HTTP, mind HTTPS esetében.

Ez nagyszerűen működik HTML és CSS esetében, sőt az Opera Mini 4 szerverei már az Opera 9.5 motorját használják, így képesek egyes CSS3 szelektorokat is értelmezni, amelyekkel még nem sok böngésző boldogul. De mi a helyzet a Javascripttel? Ebben az esetben a történet már közel sem ilyen egyszerű.

A következőkben bemutatjuk, hogyan értelmezi a Javascriptet az Opera Mini, a szerver- és a kliens oldalt, valamint az AJAX támogatást.

Javascript az Opera Miniben

Az Opera Mini képes a Javascriptek egy részét lefuttatni, de hogy melyek ezek, az attól függ, hogy mikor kell lefusson az adott script: a szerveren, az oldal betöltése előtt vagy a betöltés után. Az Opera Mini az Opera 9.5 megjelenítő motorján alapszik, így teljes mértékben támogatja a szerver oldali Javascriptet (ECMAScript 3).

A kliens oldalon sajnos a lehetőségeket erősen korlátozzák a telefon véges erőforrásai, ezért az Opera Mini a Javascriptnek csak egy részét támogatja (részletesen később):

  • korlátozott DOM eventek
  • nincs háttér scriptelés (background scripting)
  • erősen korlátozott AJAX támogatás

Szerver oldali támogatás

Mivel az Opera Mini szerverei az Opera 9.5 motorját használják, ezért az összes olyan script, amely az oldal betöltése előtt fut le, rendben működni fog Opera Miniben is, beleértve a DOM fa elemeinek módosítását is. Ezután a body elem onLoad eventje is lefut a szerver oldalon, még mielőtt a kliens megkapná a weblap tartalmát.

Egyetlen korlátozás, hogy a scriptek nem futhatnak egy-két másodpercnél tovább az oldal betöltése után, és később sem futhatnak scriptek azelőtt, hogy a felhasználó valamire rákattintott volna (ezért a delay és az interval nem használható). Hasonlóan működik az xmlrpc request: használható, de nem futhat tovább pár másodpercnél.

Miután a szerver elküldi a lapot a kliensnek, minden script leáll.

Kliens oldali támogatás

Amint a kliens megkapta a lapot, már nem ilyen jó a helyzet. A kliens valójában semmilyen scriptet nem futtat (nincs rá mód), mivel a lapot valójában a szerver tárolja. Éppen ezért nincsenek háttérben futó scriptek, és setTimeout hívással sem lehet kódot futtatni.

Vannak olyan scriptek, amelyek lefutnak az oldal betöltése után is (persze szerver oldalon):

  1. Betöltéskor az onLoad és az onUnLoad
  2. Űrlapokon:
    • az onSubmit
    • onChange: ez az event működik az űrlap kitöltése közben is, ha például van két mező, egy ország és egy régió, és a régiókat az ország függvényében lehet kiválasztani, akkor az ország kiválasztása után a Mini újra tudja tölteni az oldalt
    • onClick a gombokon (valójában akkor fut le, amikor a Mini elküldi az űrlapot, és nem akkor, amikor fókuszt kap)
  3. Kattintások: onClick az olyan elemeken, amelyek újratöltik a lapot (hivatkozások, gombok)

A többi event figyelmen kívül lesz hagyva.

Bár ez eléggé korlátozott, de az olyan oldalak, amelyek a kliens oldalról Javascripttel triggerelik a szervert, nagyrészt működni fognak - ilyen például a Facebook, amely képes akár környezeti menüket és felugró ablakokat is meg tud nyitni Opera Miniben.

Ajax támogatás

Ajax esetében hasonlóan működnek a dolgok, mint a fentiekben: az Opera Mini támogatja az XMLHttpRequest-et, de csak korlátozottan. Valójában csak a kliens irányából működik a frissítés a szerver felé, vagyis a szerver nem tudja egy külső event hatására frissíteni a klienst. Egyes Ajax oldalak így is működnek valamennyire, mint például az iGoogle (nem lehet mozgatni a dobozokat), vagy a Gmail (nem küld értesítést új levélről).

Az olyan oldalak, amelyekben a szerver kellene frissítse a klienst egy külső esemény hatására, nem működnek, ilyen például a Google Suggest, a szerver oldali IRC kliensek vagy egyszerű óra implementációk.

Ökölszabályként elmondható, hogy minden működik, amíg a labda a szerveren van, ezután már csak akkor lehet scripteket futtatni, ha a felhasználó csinál valamit (pl. rákattint egy gombra), így újra átkerül a vezérlés a szerverhez.

A bejegyzés trackback címe:

https://magyaropera.blog.hu/api/trackback/id/tr77222550

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

tenger 2007.11.22. 14:58:00

Sziasztok!Nokia 6280 telefonom van.Az Opera Mini 4-nél hiányolom a kiugrálló ablakok /pop-up/ engedélyezését.Vagy be lehet állítani, mint az asztali Operánál?Elöre is kösz.

Lodovik Trema · http://lodovik.blog.hu 2007.11.22. 23:23:41

Mivel az opera minivel csak egy szálon lehet böngészni, ezért a popupokat sem lehet értelemzni ebben a környezetben.

Bíró János 2008.09.15. 15:58:25

Tiszteletem! Egy kérdést szeretnél feltenni: ki lehet-e kapcsolni azt az opciót, az Opera miniben, amely minden egyes Opera mini indításnál, az első adatküldés/kérés előtt felteszi nekem a kérdést, hogy: engedélyezi adatok küldését az internetre?
Köszönöm! Hajrá, Opera! Nagyon szeretem!

törölt-felhasználó (törölt) 2008.09.15. 16:47:37

Azt a telefonodban kell kikapcsolni, hogy engedélyezze-e a nethozzáférést a java alkalmazásoknak. A gagyibbakban nem lehet.
süti beállítások módosítása