offline
- Rastafarii
- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
Svako ko postuje w3c web standardne, a u dizajniranju sajtova koristi flash (*.swf) animacije, dolazi do problema: kako "ubaciti" *.swf a da pri tom kod ostane validan.
Idemo redom:
Korak 1: Eksportovani html kod za *.swf
<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>
i rezultat validacije je:
Citat:Validation Output: 8 Errors
Svih 8 gresaka je posledica toga sto embed tag nije definisan po w3c standardu.
Korak 2: Izbacivanje nevalidnog koda
Sta dalje? Prvo, izbaciti kompletan embed tag:
<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>
Ovaj kod je vec validan, ali postoji jedan problemcic: radi samo u Internet Exploreru. Zasto? classid koji je ovde naveden je specifican za IE, dovodeci do toga da nonIE browseri jednostavno ignorisu object tag.
Korak 3: Sredjivanje koda za nonIE browsere
<object type="application/x-shockwave-flash"
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>
Ni ovo nece pokrenuti *.swf u nonIE browserima, ali resenje ja sve blize. U cemu je sad problem? Problem je u codebase atributu, koji sadrzi link do Macromedijinog sajta, sto je nepravilna upotreba ovog atributa. Linkovi bi trebalo da budu na istom domenu, preko cega IE prelazi, ali FF drzi do sigurnosti i jednostavno nece pustiti *.swf.
Korak 4: codebase i sigurnost u FF
<object type="application/x-shockwave-flash" width="468" height="60" title="title">
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
</object>
Kod je sve manji i manji, jos uvek je validan, ali nece da radi u FF. U cemu je problem?
Korak 5: DATA atribut
U data atributu, koji nije definisan u okviru object taga. U slucaju da se definise, to izgleda ovako:
<object type="application/x-shockwave-flash" 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>
I dobijamo resenje: validan HTML kod za *.swf koji radi svuda. Ukoliko je vas flash fajl relativno mali, i ne koristi preloader, ovo je sve sto vam treba, u suprotnom...
Korak 6: Preloader za velike fajlove
ALI ovo resenje radi SAMO za fajlove reda velicine 1-100 kb, pod uslovom da nemaju preloader. Svi fajlovi koji imaju preloader, izgubice njegovu funkciju, jer, ukoliko se kod ispise na ovaj nacin, flash mora biti ucitan skroz da bi "krenuo". Sta sad?
Predpostavimo da imate flash fajl velicine 500KB, i da on ima preloader. Kako ga pustiti, bez cekanja da se ucita? Jednostavno. Napravite malecni (par KB) flash player, i odatle pozovete veliki flash fajl. Deluje malcice glupo ali radi: preloader se vidi, kod je validan, radi u svim browserima.
Mane validnog html koda
OSIM sto IE i slicni browseri nece update-ovati flash plugin u slucaju da je to potrebno. FF hoce, ali codebase atribut je jedini nacin da IE shvati gde se nalazi novi flash plugin. Sta sad? Dva resenja su moguca:
1) napraviti mali flash fajl, recimo 1px*1px koji osim sto sadrzi codebase atribut nema drugu svrhu. FF ga nece pustiti, ali to i nije toliko bitno. Vazno je da korisnici IE browsera mogu da update-uju flash plugin. Bitno je da kod tog fajla bude sredjen kao u koraku 2.
2) definisati alternativni sadrzaj: object tag dozvoljava "child" elemente, i ucitava ih redom, po potrebi. Ako browser ne moze da ucita prvi element, ucitava drugi, ako ne moze ni drugi, onda treci i tako redom...
<object type="application/x-shockwave-flash" 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" />
<img src="noflash.gif"
width="468" height="60" alt="">
</object>
i to je to vas flash fajl sada ima validan kod, radi svuda, bez obzira na browser i velicinu, a cak i u slucaju da ga je nemoguce prikazati, ne ostavlja prazan prostor vec prikazuje alternativnu sliku.
|