Mineka Web: Članci

Flash i w3c validacija
objavljeno na http://www.mycity.co.yu
Svako ko poštuje w3c standarde, a u dizajniranju sajtova koristi flash animacije, dolazi do problema: kako “ubaciti” flash a da pri tom kod ostane validan. U ovom članku ćemo Vam detaljno objasniti kako da ovaj problem rešite.
Idemo redom: završili ste flash animaciju, eksportovali kod, i ubacili na Vašu stranu. Kod koji ste dobili bi trebalo da izgleda poput ovog:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab
#version=6,0,0,0" width="468" height="60" title="title">
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="flash.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" width="468" height="60"></embed>
</object>
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab
#version=6,0,0,0" width="468" height="60" title="title">
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="flash.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" width="468" height="60"></embed>
</object>
I on (naravno) nije validan po w3c standardima - validator prikazuje 8 grešaka. Svih 8 grešaka je posledica toga što embed tag nije definisan po w3c standardima. Sledeći korak je izbacivanje kompletnog dela koda između <embed> i </embed> tagova.
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab
#version=6,0,0,0" width="468" height="60" title="title">
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
</object>
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab
#version=6,0,0,0" width="468" height="60" title="title">
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
</object>
Ovaj kod je već validan, ali postoji jedan problemčić: radi samo u Internet Exploreru. Zašto? Zato što je classid koji je ovde naveden specifican za IE, dovodeći do toga da ostali browseri jednostavno ignorišu object tag. Sledeći korak je izbacivanje i tog atributa.
<object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab
#version=6,0,0,0" width="468" height="60" title="title">
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
</object>
#version=6,0,0,0" width="468" height="60" title="title">
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
</object>
Ni ovo neće pokrenuti animaciju u ostalim browserima, ali rešenje je sve bliže. U čemu je sad problem? Problem je u codebase atributu, koji sadrži link do Macromedijinog sajta, što je nepravilna upotreba ovog atributa. Linkovi bi trebalo da budu na istom domenu, preko čega IE prelazi, ali Firefox i ostali browseri drže do sigurnosti i jednostavno neće pustiti animaciju.
<object width="468" height="60" title="title">
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
</object>
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
</object>
Kod je sve manji i manji, još uvek je validan, ali radi samo u Internet Exploreru. U čemu je problem? U data atributu, koji nije definisan u okviru object taga, a koji je neophodan za puštanje animacije u browserima koji se ne zovu Internet Explorer.
<object width="468" height="60" title="title" data="flash.swf">
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
</object>
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
</object>
I dobijamo rešenje: validan HTML kod za flash animacije koji radi svuda. Ukoliko je Vaš flash fajl relativno mali, i ne koristi preloader, ovo je sve što vam treba, u suprotnom, čitajte dalje.
Napomena: ovo rešenje radi SAMO za fajlove reda veličine 1-100 kb, pod uslovom da nemaju preloader. Svi fajlovi koji imaju preloader, izgubiće njegovu funkciju, jer, ukoliko se kod ispiše na ovaj nacin, flash mora biti učitan skroz da bi “krenuo”. Šta sad?
Predpostavimo da imate flash fajl veličine 500KB, i da on ima preloader. Kako ga pustiti, bez čekanja da se potpuno učita? Jednostavno. Napravite malecni (par KB) flash player, i odatle pozovete veliki flash fajl. Ovaj “workaround” radi: preloader se vidi, kod je validan, radi u svim browserima.
Mana validnog HTML koda: Internet Explorer i browseri bazirani na njemu (Avant, Maxthon) neće update-ovati flash plugin u slučaju da je to potrebno. Ostali browseri hoće, ali codebase atribut je jedini način da Internet Explorer shvati gde se nalazi novi flash plugin. Šta sad? Napraviti mali flash fajl, recimo 1px*1px koji osim što sadrži codebase atribut nema drugu svrhu. Firefox ga neće pustiti, ali to i nije toliko bitno. Važno je da korisnici Internet Explorer browsera mogu da update-uju flash plugin.

