SWFobject – valid, és aktiváció mentes flash tartalom (updated)
Ha van vmi amit sikerül sokaknak a leggyakrabban elszúrni egy weblapkészítése során, az az oldalba beillesztendő flash tartalom kódja. Még mindig sokan használják az <embed> tagot (minden böngésző azonosítás nélkül), illetve a fantáziadús, de nemlétező paramétéreket értékkel, miegymással, rossz helyen, rossz időben. Az invalid kód pedig igencsak megnehezíti egy esetleges másik critical hiba feltárását (,hogy csak egy példát mondjak).
A helyzetet bonyolítja az Internet Explorer (és igen az új Opera is ilyen!) új frissítései során szembesülő aktivációs probléma is, ekkor ugyanis minden hagyományos úton beillesztett flash csak egy plusz kattintás során lesz elérhető és aktív.
Ez különösen zavaró lehet pl. egy menüsornál vagy egy bannernál vagy akárminél. Viszont van rá gyógyszer(ami ráadásul elég régóta létezik), amit most megvizsgálunk közelebbről.
A dolog lényege a következő: egy javascript segítségével, illesztjük be az oldalunkon használni kívánt tartalmat és ez a script gondoskodik majd róla, hogy a böngésző megkapja az ehhez szükséges adatokat. Magát a script-et amit használni kívánunk úgy hívják hogy SWFobject (régebben FLASHobject volt a neve) és a linkre kattintva bejön a hivatalos oldala, eme írás ennek egy rövidített, javított, magyarul beszélő kivonata lesz.
Maga a használat egyszerű:
- töltsük le az oldalon található scriptet
- illeszzük be az oldalunkra – javasolt a head részbe
- a kívánt helyre – ahová a flash tartalmat szeretnénk elhelyezni – készítsünk egy div-es containert
- majd alá a illesszünk be alá egy pár sorból álló javascriptet – itt töltjük ki az átadni kívánt paramétereket
Javascript nélkül valahogy így tennénk be az oldalra az swf-ünket:
<object type="application/x-shockwave-flash" id="mymovie" data="mymovie.swf?variable1=value1true" width="400" height="300">
<param name="movie" value="mymovie.swf?variable1=value1" />
<param name="quality" value="best" />
<param name="wmode" value="transparent" />
A tartalom megtekintéséhez flashplayer szükséges / Nem elérhető a tartalom
</object>
Mivel nem árt tudni, milyen paramétereket kell/lehet megadnunk, akkor nézzük is meg mit ír erről a flash dokumentáció – az Adobe honlapján.
Szóval nagyjából így valid, így helyes, de sajnos ott van az a fránya Explorer és az aktivációs probléma. Most akkor nézzük, hogy megy ez az SWFObject-tel:
(ezt betesszük egyszer a forrás tetjére (<head> </head> közé).
<script type="text/javascript" src="swfobject.js"></script>
majd a lapon belül ahol szeretnénk a flasht betenni:
<div id="flashcontent">
Ennek a szövegnek a helyére fog kerülni a flash tartalom. Az előző példából kiindulva: A tartalom megtekintéséhez flashplayer szükséges / Nem elérhető a tartalom.
</div>
majd a szkript ami kitölti:
<script type="text/javascript">
var so = new SWFObject("mymovie.swf?variable1=value1", "mymovie", "200", "100", "7", "#336699");
so.addParam("quality", "best");
so.addParam("wmode", "transparent");
so.addParam("salign", "t");
so.write("flashcontent");
</script>
És ennyi. Na most jöjön pár magyarázat ill. felmerülő kérdés:
- Mivan ha több flash is van az oldalunkon? Semmi gond: a lényeg, hogy az adott dives container id-je ugyanaz legyen mint a so.write sor paramétere. Ne legyen két egyforma azonosítójú div az oldalon.
- A szkript első sorában definiáljuk az objektumot, a paraméterek sorrendben a következők:
- forrásnév(swf),
- ID (azonostás pl swfliveconnect esetén ill. más kommunikációs mókák esetén),
- szélesség,
- magasság,
- verzó – milyen player jó hozzá (a script detektál is és ha nem egyezik updatért sír!,
- háttérszín.
- Lehetnek még más speckó paraméterek is – erről az oldalon olvashattok, de alapba ennyi elég.
- A so.addParam részből lehet több is, értékei (2) a param tagoknak értékeinek (name, value) felelnek meg, ebből annyit használsz amennyire egyébként szükséged van.
- Páran biztos nem értik miért ilyen ronda a forrás név (mymovie.swf?variable1=value1) nos ez csak egy példa miként lehet flashváltozónak értéket átadni (erre alapban van ám az Adobe-nak egy flashvars nevű paramétere amit az object tagban használni lehet. A script biztosít egyébként erre egy külön lehetőséget, a fenti példából kiindulva használhatjuk a so.addVariable(“variable1″, “value1″); ekkor forrásként elég a mymovie.swf. (Természetesen működik a so.addParam(“flashvars”, “variable1=value1″); megoldás is.)
- A detektálásra van egy kellemes példa van a letöltött script csomagban, amennyiben jelezni szeretnénk milyen verzió számú player van a felhasználó gépén a kevetkező sort illesszük be a szöveges javascriptbe:
var version = deconcept.SWFObjectUtil.getPlayerVersion();
if (document.getElementById && (version['major'] > 0)) {
document.getElementById('flashcontent').innerHTML = "Jelenleg a következő verzió számú Flash lejátszó van a gépedre telepítve: "+ version['major'] +"."+ version['minor'] +"."+ version['rev'] +" <a href =\"http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&promoid=BIOW\" >Kattints ide a legfrissebb letöltéséhez...</a>";
}
Végezetül pedig mintának és kezdőknek pedig javaslom http://www.kirupa.com/developer/flash8/flash_fix.htm oldalát ahol egy egyszerű bannerhoz beillesztendő kódot megkaphatjuk az űrlap kitöltésével.
Itt pedig egy példa a Yourube clip beillesztésére: SWFOBJECT: Youtube test
Update: Csináltam egy verziót a javascriptből, ami most már mindenképpen valid kódot tol be, Win és Maci alatt minden modernebb és frissebb böngésző alatt szaladt – bonyolultabb feladatoknál, mondjuk azért nem vállalnék rá garanciát, hogy minden rendben, de az átlag felhasználás mellet sztem ez így használható. A fent bemutatott “SWFOBJECT: Youtube test” is már ezt használja.
Popularity: 5% [?]

2006. July 10., Monday 1:18
Szerintem SWFobject nem valid, de tök mindegy.
Attól, hogy javascript írja a beágyazást ezzel becsapva IE-t és a validatort is, még nem lesz valid a beágyazás.
Kukkants bele a JS-be kicsit, hogy valójában milyen tag-eket irat ki a dokumentumba. Igen, embedet is.
2006. July 10., Monday 6:42
ennek a legnagyobb baja, a sokat szidott , támadott javascript. ugyanis a flash menne anélkül is -így viszont necces. ráadásul tényleg addig működik csak, míg a validátorok nem látják a dinamikusan előállított tartalmat.
2006. July 10., Monday 7:13
Én úgy érzem létfontosságú dolgot (pl. menü) nem flashel kéne csinálni.
2006. July 10., Monday 10:11
#1: sztem olvasgassál még egy kicsit.
tetszik, nem tetszik sztem jelenleg ez az egyik legjobb megoldás a piacon
2006. July 10., Monday 12:33
Mit olvasgassak?
2006. July 10., Monday 12:55
swf.hu-t caber_net:) nem lehet mindig csak írni ott sem!
2006. July 10., Monday 14:01
az swf.hu pont egy elkötelezetten valid oldal…
2006. July 10., Monday 14:02
de innentől kezdve ha vkinek a faszverésen kívül nincs más hozzászólni valója a kommentjében azt nyugodt szívvel törlöm.
2006. July 10., Monday 16:15
Öööö – és ha én a szerveren akarom a Flash paramétereit kitölteni? Szóval ott nem mondhatom, hogy so.addParam(…). Na jó akkor az egész
OBJECT tag-et megcsinálom ott. JS-ből csak a document.write-ot használom. Persze ezektől a dolgoktól nem alszik jól az ember, de ha valaki tud jobbat…
2006. July 10., Monday 16:49
Az, hogy JS segítségével íratsz ki nem valid kódot, átverve a validátort nem nagy szám, de ha már valaki ezt rajtam kívül megjegyzi, nem feltétlen kell tapló stílusban leszólnod.
Arról nem is beszélve, hogy ez a megoldás már hónapok óta ismert, sőt már látam magyarul is egy-két helyen.
Egyébként más, okosabb megoldást én sem tudok, de szeretem a faszomat verni nyilvánosan, mert ettől férfinak érzem magam.
2006. July 10., Monday 19:42
a valid flash beilleszto kod elterejedeset leginkabb az segiteni ha a maga a flash alapbol valid html-t kopne ki magabol…
2006. July 10., Monday 22:09
Minden álmom a tökéletes reggel megvalósítása: Egy erkélyen elfogyasztani egy szelete kakás szendvicset, bőrszettben, miköben Juan csapkodja a popómat.
Tudom, nem ez a megfelelő fórum, de hátha van valaki, aki tudna nekem segíteni. Lécciléccilécci.
2006. July 10., Monday 22:29
OFF
Ryphez, de kibaszott gusztustalan vagy bazmeg. öa…
/OFF
2006. July 10., Monday 22:33
Aha, értem.
torni & tomszi bácsinak az a lényeg, hogy olyan emberek irogassanak ide akik csak bólogatnak nekik, hogy milyen okos és ügyesek, ez nem probléma, de akkor nem kéne talán ilyeneket kiírni: “Minden véleményt szívesen látunk, még akkor is ha az a miénkkel nem is feltétlenül egyezik.” – nem túl hihető :)
2006. July 11., Tuesday 0:35
Szerintem az a naivitás és tévút, hogy egy honlap az összes különböző böngészőre és beállításaikra megvan egyetlen kódból. Miért kellene így lennie? Ahogy egy filmet sem lehet csak úgy a TV-n nézni, előbb át kell alakítani nem is kicsit, honlapnál sem hülyeség szerintem a böngésző-leválogatás.
2006. July 11., Tuesday 0:58
Ryphez: Arról nem a bouncer tehet, ha a kedves vendég buta és nincs tisztában a klub szabályzatával, ami a jegyre volt írva :(
2006. July 11., Tuesday 5:56
arsen: Azért mert van szabvány (http://www.w3.org/MarkUp/) ami alapján kéne működnie az összes böngészőnek.
2006. July 11., Tuesday 13:59
nagyon vicces látni, hogy nem csak az én kommentjeim kerülnek átirkálásra :)
akkor már inkább érdekes a videoformátumok beszúrása, amit (szintén furcsa, hogy csak most) az A List Apart foglalt össze:
http://www.alistapart.com/articles/byebyeembed
2007. January 2., Tuesday 21:37
és ez megoldja azt a problémát is h ha firefoxra van beágyazva akkor nem csuszik el internetexplolerben v forditva ???
2007. May 11., Friday 19:27
Helló!
Én relative kezdö vagyok java sriptek terén,nagyon örünék, amennyiben elmagyaráznátok hogy müködik. Konkrétan beillesztgetni tudom, de nem értem a működését…minden segítséget elöre is köszönök!
2007. May 29., Tuesday 9:46
A mailcímem p.d@vipmail.hu
2007. May 29., Tuesday 9:46
A mailcímem p.dd@vipmail.hu
2007. August 29., Wednesday 18:12
Annyi lenne a kérdésem, ezt a megoldást használom én is, de hogy tudnám azt még megoldani, hogy ne loopolja a flash animációt.
próbáltam ezzel a paraméterrel, de nem ment:
so.addParam(‘loop’, ‘false’);
Iletve kiegészítettem egy helyen a js-fájlt, most Firefoxban nincs loop, de IE-ben még mindig! Égető lenne a megoldás
Köszi előre is!I
2008. January 21., Monday 21:23
Q. Who uses SWFObject/FlashObject?
A. Websites like The Library of Congress, Adobe.com (A slightly customized version), Amazon.com, Windows.com, YouTube.com, skype.com, Snapple.com, it is included with Adobe Photoshop (in the Flash web photo galleries) and thousands of others. Colin Moock also suggests it as an alternative to the Adobe Detection kit.
Talán nekem is jó lesz. :D
2008. December 18., Thursday 2:01
tomsolo!
Régóta nem írtatok ezen az oldalaon. Azért megpróbálom. Kérdésem az volna, hogy ezzel a módszerrel flv videó fájlt is fel lehet telepíteni?
2010. July 2., Friday 20:44
Köszi, hogy megemlítetted a cikket a WebPillangón! Sokaknak hasznára van!