esmaspäev, 19. oktoober 2009

iPhone veebirakendused vol. 3

Eelmistest iPhone veebirakenduste postitusest kirjutasin, kuidas kasutada ära erinevaid iPhone brauseri poolt pakutud võimalusi, loomaks rakendustelaadseid veebilehti. Kuid siiani on nendelt rakendustel olnud üks häda - need töötavad ainult võrgus olles, offline annab rakendus veateate.

Õnneks on ka siin lahendus olemas, tuleb kasutada offline application caching API't, mille toetus on olemas nii uuemates Firefoxides kui ka Safarites ning seega ka iPhone brauseris.

Lehe puhverdamiseks on esiteks tarvis luua puhvri manifest fail - selles kirjeldame ära, millised ressursid peaks brauser ära tõmbama. Kuna demorakenduses on kõik vajalik ainult HTML failis endas, siis midagi muud puhverdada polegi vaja.

myapp.manifest faili sisu:
CACHE MANIFEST
app.php

Selle jaoks, et manifesti fail oleks brauserile üheselt arusaadav, tuleks paika seada ka vastav mime-tüüp. Kui serveris on võimalik kasutada .htaccess faile, saab seda teha lisades manifesti faili kataloogis asuvasse .htaccess faili rea

AddType text/cache-manifest manifest

Ja viimasena oleks tarvis veebilehe koodis ära märkida, et puhverdamine on kasutusel. Kuna tegu on HTML5 featuuriga, peaks ka doctype olema vastav.

<!DOCTYPE HTML>
<html manifest="myapp.manifest">

Kui nüüd avada selline rakendus iPhone brauseriga ning lisada see telefoni töölauale, siis võib rakendust avada ka täiesti offline olekus, mis teeb rakendusest praktiliselt samaväärse kui AppStore'i kaudu hangitud rakendused on. Ainsa vahega, et installida on suhteliselt mugav - seda saab teha otse veebilehelt ning ilma igasuguse itunes kontota.

Selle jaoks, et kontrollida, kas veebileht on avatud otse brauserist või töölaualt (et vahet teha, kas näidata installimise juhendit või mitte), saab kasutada window.navigator omadust standalone.

if (window.navigator.standalone){
    // tee vajalikke asju
}else{
    // näita installimise juhendit
}

Näites kasutatud puhverdamine on suhteliselt primitiivne - võibolla tuleks vahepeal mingeid asju uuesti laadida või tuleks andmete sünkroniseerimiseks kontrollida, kas parasjagu ollakse online või offline jms.  Kõik see on võimalik, tasub lugeda täpsemat spetsifikatsiooni, mille leiad siit.

Kommentaare ei ole: