Jak obejít “nefunkční” Flashe po aktualizaci IE
20.04.2006 19:36Pokud máte např. web, který je celý ve flashi (což já osobně nemám opravdu rád) nebo máte na svém webu flashové reklamy, tak s nejnovější aktualizací Internet Exploreru je většina flashů “neaktivních". Flash je sice neaktivní, ale ve stránce se zobrazí a animace fungují, ale nefungují na něm žádné události (kliknutí, přejetí myši apod.). Aby flash fungoval normálně, tak uživatel musí myší nad flash najet a kliknout (nebo stisknout Enter), čímž se flash aktivuje a začně chovat jako obvykle.
Toto trápení je způsobeno změnou zpracování ActiveX komponent v IE a týká se to tagů APPLET, EMBED a OBJECT. Pro autory webů s flashovým obsahem nebo zadavatele flashové reklamy to je nepříjemná věc, kterou je naštěstí možné obejít.
Jak to obejít?
Toto omezení je možné obejít tak, že se reklama vloží do stránky pomocí externího JavaScriptu. Tzn. pokud máte tag <object> nebo <embed> přímo ve stránce, tak daný objekt bude zcela jistě neaktivní - prohlédněte si příklad, ve kterém je flash přímo ve stránce.
Řešení 1 - vložení objektu přes externí skript
Pokud je do stránky ActiveX objekt vložen z externího javascriptu, tak vše funguje bez problému. Vyzkoušejte si funkční příklad.
<!-- HTML stránka -->
<html>
<body>
<script type="text/javascript" src="embed.js"></script>
</body>
</html>
// externí javascript
document.write('<embed src="flash.swf"></embed>');
Řešení 2 - externí znovu vložení pomocí outerHTML nebo innerHTML
Pokud je daný flash ve stránce "natvrdo", je možné ho znovu vložit pomocí externího JavaScriptu. S tímto řešením přišel David Grudl, které popisuje na svém blogu. Do stránky jednoduše nalinkujete externí javascript, který se načte pouze v IE (podmíněné komentáře) a až po načtení HTML kódu stránky (vlastnost defer) se v cyklu projdou veškeré objekty a znovu se vloží. Vyzkoušejte si funkční příklad.
<!-- HTML stránka -->
<html>
<head>
<!--[if IE]>
<script type="text/javascript" src="fix_eolas.js" defer="defer"></script>
<![endif]-->
</head>
<body>
<embed src="flash.swf"></embed>
</body>
</html>
Aby skript byl opravdu univerzální, tak jsem ho musel drobně rozšířit (stáhnout):
var aXobjects = new Array("object","embed","applet");
for (var x=0; x<aXobjects.length; x++) {
var objects = document.getElementsByTagName(aXobjects[x]);
for (var i=0; i<objects.length; i++) {
objects[i].outerHTML = objects[i].outerHTML;
}
}
Dále je nutné si dát pozor na správně nastavenou cache na serveru, protože pokud by daný soubor nebyl správně uložen u klienta, tak by se po znovu vložení opět stahoval ze serveru.
Je nepříjemné, že odstranit toto omezení jde pouze pomocí externího skriptu, tudíž pokud obsah výše uvedeného skriptu vložíte inline na konec stránky, tak i po jeho vykonání budou objekty stále neaktivní. Nicméně řešení existuje, není to sice nic hezkého, ale mohlo to být horší.
20.04.2006 | Rubrika: JavaScript | Trvalý odkaz
20.04.2006 v 20:26
Trochu OT, ale místo “celý ve flashy” bych napsal celý ve flashi, vypadá to líp
20.04.2006 v 20:44
2 Robert: Ajta … diky
20.04.2006 v 20:53
Nešlo mi do hlavy, ako je to s aktivaciou flash, pretoze mnou vytvarana animacia fungovala. Dik za vysvetlenie:
“Flash je sice neaktivní, ale ve stránce se zobrazí a animace fungují, ale nefungují na něm žádné události (kliknutí, přejetí myši apod.).”
20.04.2006 v 21:17
Jeden problémek při použití druhého: občas se stává, že se po provedení skriput IE zasekne na načítání “nečeho” (skutečně netuším co se snaží znovu stáhnout), což pro uživatele může být matoucí; druhý problémek spočívá v tom, že pokud se používá loader, tak při prvním načtení se tento loader nezobrazí - pouze externí flash. Po refreshi je to ok. Bohužel nemám vysledováno u jakých přesně flashů to dělá problémy.
21.04.2006 v 16:18
bohuzel je to dost problematicke a dost to blbne i se zde presentovanym resenim, pak se totiz vyskytnou nove problemy - hlavne nacitani promennych do flashe pomoci: flashVars , preloader atd… hmmm to teda microsoft opet neco zavaril:-(((
25.04.2006 v 10:09
Musím potvrdit, že toto řešení bohužel nelze použít u Flashů, do kterých se načítají FlashVars (
25.04.2006 v 12:07
2 qwe: Tak to je velmi mrzuté, jestli budu mít chvilku, tak se na to podívám.
27.04.2006 v 12:39
microsoft chce znicit flash aby pak moh vyrukovat s eclipse a rict koukejte, eclipse to nedela - jinak si to neumim vysvetlit
nejake podrobnejsi informace?
27.04.2006 v 12:56
ivo pise oc jde: http://blog.lide.cz/ilblog/2006/04/21/279
v dobe kdy se finishuje as 3.0 a nova virtual machine…
to je uzasny
01.05.2006 v 13:54
Taky mi to blbne
16.05.2006 v 13:55
Skvělé řešení, díky.
08.08.2006 v 08:39
no musím potvrdit, že u preloderu to dělá neskutečný problémy.. hlavně když jsou na stránce 2 fleše s preloaderem, relativně to v IE funguje, dokud někdo neaktualizuje (neobnoví) zobrazenou stránku, pak se preloading točí pořád dokola..
13.08.2006 v 13:35
Tak toto řešení hledám už dlouho, díky moc
27.08.2006 v 14:20
sem asi lamka ale me se t ovloží v dost surové podobě kde mam nastavit výšku barvu pozadí atd toho vkládanýho flashe? jedná se o tlačitko z dreamweaver dik za odpověd
24.10.2006 v 09:12
Ten preloader se mi taky cyklí
25.10.2006 v 23:44
Toto chovanie som spozoroval aj v novej Opere 9.xx. Tymto riesenim sa vsak nic pre operu neriesi
, teda aspon priklad nefunguje tak, ako by mal.
03.12.2006 v 12:22
Někde jsem našel lepší řešen, ale už jsi napamatuji kde
25.01.2007 v 19:30
Šikovné.
Další věc, kterou nemusím řešit, protože to vyřešil někdo jiný a lépe
29.01.2007 v 13:35
ako je uz spomenute vyssie, toto riesenie nefunguje pre operu 9.0+.
01.02.2007 v 19:38
Pěkné řešení. Používal jsem ho dodnes. Teď nevím co dál. Po včerejší aktualizaci winů, jsem si všiml, že to nefunguje v IE 6. V IE 5, IE 5.5 a IE 7 je to bez problémů (v FF, Opeře a Konqeroru taky, samo). Vše mám nastaveno v defaultu, kvůli testování funkčnosti stránek. At´dělám co dělám (zápis přes embed, bez skriptů, čistý object), nejde odbourat hláška “stiskněte OK pro pokračování nahrávání stránek”. Samo, že to musí jít vypnout v “možnostech internetu”, ale to neví drtivá většina uživatelů tohoto nešťastného prohlížeče a pro ty je třeba to nějak vyřešit. Asi jsem na to krátký.
P.S.: dělá to na všech webech, včetně SEZNAMU.
04.10.2007 v 03:35
[*map/mapcnsde1_mordy.txt||10||r||1|| @]