PC Press
O nama
O nama
Pretplata
O nama
Postanite saradnik PC-ja
Kontakt sa redakcijom
PC Press
Novi broj
Novi broj   
Pretrazivanje
Arhiva
Arhiva   
PC Online
PC Plus   
Specijalna izdanja
Rubrike Rubrike
PC #117 : Decembar 2005 TehnoGuru

 Naslovna  Sadržaj 
Aleksandar Vacić  

Sazrevanje PCCD-a

Aplikacija kojom pripremamo naš prateći CD proteklih meseci je pretrpela razne promene, o kojima smo govorili i na protekloj "Sinergiji". Podsetimo se na par zanimljivih problema...

U PC #103 smo pisali o realizaciji PCCD Web aplikacije. Na nedavno održanoj „Sinergiji 05“ predstavili smo aplikaciju sa korisničke i tehničke strane i prikazali novu, moderniju verziju – tu prezentaciju ste videli na CD-u koji je pratio prethodni broj našeg časopisa. U tehničkom delu priče napomenuo sam da je u toku razvoja verzije 2 bilo nekoliko interesantnih problema i obećao tekst koji će ih pobliže objasniti.

Ostatak iz prošlosti

(kliknite za veću sliku)

Jedan deo problema se javio i tokom razvoja prve verzije. Pošto je čitava aplikacija realizovana u skladu sa načelima koje promovišemo kroz tekstove u „PC“- ju, uobičajeni set CSS ispravki za IE6 (o kojima smo već pisali) je morao biti primenjen. Sve ispravke su sakrivene od ostalih browser-a putem uslovnih komentara (o kojima smo pisali u PC #110). Dizajn aplikacije je jednostavan i podređen funkcionalnosti, tako da posebnih problema nije bilo. Razlog zašto ih spominjemo jesu ohrabrujuće najave koje potiču sa zvaničnog bloga IE tima. Naime, u tekstu Standards and CSS in IE (blogs.msdn.com/ie/archive/2005/07/29/445242.aspx ) vodeći ljudi IE razvojnog tima su najavili da će već u IE 7 beta2 biti otklonjeni mnogi od veoma neprijatnih problema.

I ne samo to, već IE tim u zapisu Call to action: The demise of CSS hacks and broken pages (blogs.msdn.com/ie/archive/2005/10/12/480242.aspx ) otvoreno poziva Web autore da već sada počnu pripreme za uklanjanje CSS hakova radi kompatibilnosti sa IE7. Microsoft-ovi programeri u tom istom zapisu preporučuju da sve hack-ove za IE6 sakrijete unutar uslovnih komentara – upravo ono što smo mi preporučivali. Kada u ovu priču uključite i najavu Development Toolbar-a za IE7 (najavljen na PDC ’05) jasno je da je Microsoft svestan da je „izgubio“ Web programere i da ovim unapređenjima i dodacima želi da ih vrati.

Još jedan bitan detalj koji će biti promenjen u IE7 jeste priroda select elementa. U IE6, taj element nije kreiran od strane Web kontrole IE-a, već je korišćena standardna Windows kontrola. Samim tim, apsolutno pozicionirani slojevi – npr. dinamički padajući meni koji koristimo u PCCD aplikaciji – ne mogu biti postavljeni preko takvih elemenata. Zbog toga implementacija menija u PCCD aplikaciji sadrži skript koji omogućava zaobilaženje ovog problema. Skript se takođe učitava putem uslovnih komentara tako da ga samo IE6 vidi, što je odlično jer u IE7 i select element postaje čista HTML kontrola i spomenuti skript neće biti potreban.

Firefox muke...

Najveće osveženje u novoj verziji aplikacije jeste uvođenje drag and drop mehanizma za izbor i raspoređivanje fajlova na CD-u. Iskoristili smo sjajnu biblioteku skriptova sa sajta script.aculo.us koja se savršeno uklapa u modernu filozofiju Web dizajna. Pokazalo se da je to bio indirektni izvor najvećih problema. Počnimo od toga da je sam panel za izbor tekstova (svetlo-plava površina na slici 1), koji može sadržati dugačku listu fajlova, fiksiran na određenu visinu i dodato je CSS pravilo overflow:auto. To znači da će se, ukoliko u panelu ima više opcija nego što može stati u zadatu visinu, pojaviti scrollbar. Ako opcija ima manje, scrollbar neće postojati.

Firefox ima neprijatan problem vezan za ovakve elemente, koji najviše smeta upravo kod dinamičkih menija. Naime, kada se dinamički meni otvori (slika 1) i kada pomerate miša preko opcija podmenija, meni će naglo nestati kada dođete do opcije Šabloni. Upravo na mestu gde je gornja ivica elementa sa overflow:auto pravilom. Meni se bazira na li:hover selektoru, što može značiti da Firefox smatra „jačim“ to što se miš nalazi iznad overflow:auto elementa i poništava dejstvo :hover pseudo-selektora.

Prema nezvaničnim najavama, ovaj bag će biti rešen u predstojećoj verziji 1.5, a do tada je problem pristupa tim opcijama rešen tako što klik na opciju glavnog menija (Baza podataka) otvara posebnu stranicu na kojoj je kompletan meni izlistan kao prosta lista opcija (slika 2). Preporučujem da napravite ovakve stranice uvek kada koristite dinamičke menije i da ih vežete na sve opcije menija koje otvaraju neki podmeni, tj. nemaju sopstveni link. Na javnom sajtu, gde ne znate kojim sve browser-ima ljudi mogu pristupati, ovakva stranica može predstavljati jedini način da se do informacije uopšte dođe.

...i muke po Internet Explorer-u

(kliknite za veću sliku)

Daleko ozbiljniji problem koji nas je dugo mučio jeste „padanje“ IE-a kada se otvara stranica na kojoj je implementiran drag and drop mehanizam. Problem se javljao isključivo na računarima našeg glavnog urednika, kako u firmi tako i kod kuće i na notebook-u. Prvo sam mislio da je nešto do Windows-a XP, ali se problem nije javljao ni na jednom sličnom računaru u firmi gde radim. Međutim, kod Dejana „pukne“ čim otvori te stranice. Posle nekoliko dana raznih pokušaja naslepo, nije bilo druge nego da se sastanemo u Redakciji i pokušamo da na licu mesta pronađemo uzrok.

Teško je opisati i setiti se šta smo sve probali u periodu od 5 sati. Srećom da je na Dejanovom računaru bila instaliran Visual Studio pa nam je njegov debugger omogućio da saznamo da IE puca zbog greške: R6025 pure virtual function call. Pretraživanje po Internetu je izbacilo hiljade stranica – ne baš ohrabrujuće, ali dovoljno za početak. Sati su prolazili dok smo isprobavali razne savete. Na jednom od foruma sam našao primer da se nekome javljao isti problem zato što je imao div element na koga su primenjeni i overflow:auto i position:relative – što je naš slučaj. Međutim, ukidanje tih opcija nije pomoglo.

Stranica www.edup.tudelft.nl/~bjwever/advisory_msie_R6025.html.php je nivo očaja pomerila za celu skalu. Na njoj se opisuju razne varijante skriptova koje mogu dovesti do pojave ove greške u IE-u. Zatim smo, pukim slučajem, shvatili da se problem javlja samo ako se koristi miš. Ukoliko se koristi tastatura stranica se učitava potpuno normalno, ali čim se pomeri miš IE pukne. Potpuno ludo!

Probali smo i na susednom, Vesninom računaru, za koji se ispostavilo da ima identičnu verziju Windows-a i Internet Explorer-a. Vilice su nam pale do poda kada je kompletna aplikacija savršeno radila na tom računaru, bez ikakvih „pucanja“. Sve luđe! Mrak mi je pao na oči na pomisao da se problem javlja zbog neke druge aplikacije – upoređivati šta je instalirano na dva računara je Sizifov posao.

I onda sam, negde posle ponoći, naišao na Usenet poruku gde Henri Leboeuf (www.generation.net/~hleboeuf/ ) odgovara na očajničko pitanje u vezi spomenute greške. Poruka kaže da u suštini postoje samo tri razloga da IE „pukne“: prvi se odnosi na XSL transformaciju (kakve u našoj aplikaciji nema), druga na neki problem sa Javom (koju ne koristimo), a treći na neku nepravilno pisanu ekstenziju koju je neka „treća firma“ radila za IE. Već smo više puta proverili i verovali da takvih ekstenzija nema, ali recept iz poruke smo ipak probali: Tools / Internet Options / Advanced / Browsing, pa ukinete opciju Uncheck the Enable 3rd party browser extensions. Voila – problem je nestao kao rukom odnesen. Trebalo je naći koji to „nevidljivi“ BHO ruši IE.

BHO je, inače, Browser Helper Object, i može predstavljati najrazličitije stvari – od Google Toolbar-a do raznih spyware gadosti. Najlakši način da se izlistaju svih instalirani BHO objekti jeste BHO Deamon (www.definitivesolutions.com/bhodemon.htm ), besplatan program koji omogućava i deinstaliranje tih dodataka. Na listi se pojavio nekakav je bio Text Ware’s QuickFind. Pokušaji da pronađem home page proizvođača nisu dali rezultate, ali sam pronašao da se instalira uz Cambridge Advanced Learner’s Dictionary on CD-ROM (testiran u PC #100) koji Dejan povremeno koristi, pa se problem javljao samo na njegovim računarima.

Opis QuickFind-a je razrešio i misteriju zašto je IE padao tek kad se pomeri miš. Naime, QuickFind aktivno prati pomeranje miša po ekranu i kada detektuje neku reč, signalizira to rečniku koji otvori stranicu sa datom reči. Lepo zamišljeno i korisno, da nije traljave implementacije koja obara IE.

Da rezimiramo: ako IE pada na nekoj Web stranici, isključite ovu opciju i probajte ponovo. Ako se stvar reši, ostaje da uz pomoć BHO Deamon-a pronađete šta tačno ruši IE i deinstalirate uljeza. Sam program možete iskoristiti i van toga – izuzetno je efikasan i koristan za uklanjanje raznih neželjenih dodataka koji su se možda uselili na vaš računar zbog sigurnosnih rupa u IE-u.

Keširanje URL-ova

Poslednji značajan problem se takođe javljao u IE-u. Naime, u PCCD aplikaciji snimanje izmena podataka u formi se radi tako što se form.submit uputi na skriveni iframe, čime se ubrzava rad i ukida potreba za čestim osvežavanjem strane. Međutim, ako je URL koji često pozivate isti, IE će keširati odgovor sa servera i ponekad neće ni poslati zahtev ka serveru.

Potrebno je nekako izmeniti URL tako da se razlikuje pri svakom pozivu. To se najlakše radi tako što ćete na kraju URL-a dodati parametar koji sadrži trenutno vreme u milisekundama – verovatnoća da kliknete dva puta u istoj milisekundi je mizerna. Slika 3 sadrži skript koji ovo radi.