Jak obejít aktivování pluginů v IE
Doplněno 11. prosince 2007: Microsoft koupil od EOLAS licenci a vydal záplatu KB 945007, která nutnost aktivovat pluginy zase ruší.
Nedávno jsem psal, že již brzy bude nutné každý Flash v Internet Exploreru aktivovat kliknutím. Vypadá to asi takto:
Aktivace Flashe kliknutím.
Této nepříjemnosti lze předejít jen tak, že každý aktivní prvek (tedy třeba Flash) bude vložen externím skripem. Což nás staví před dvě úskalí:
- musíme únavně přepsat všechny stránky používající Flash
- bez povoleného JavaScriptu nebude Flash vůbec zobrazen
Jednoduchý trik
Obojímu se lze vyhnout šikovným trikem. Vytvoříme si skript, který do
stránky znovuvloží již existující aktivní prvky. Soubor
fix_eolas.js (download):
var objects = document.getElementsByTagName("object");
function eolas(i)
{
objects[i].outerHTML = objects[i].outerHTML;
}
for (var i=0; i<objects.length; i++)
window.setTimeout("eolas(" + i + ")", 1);
Vlastnost outerHTML je proprietárním rozšířením Internet Exploreru, což nám vůbec nevadí, protože jen tento prohlížeč je aktivováním postižen. Musíme však dohlédnout na to, aby ostatní prohlížeče skript nevykonávaly. K tomu se výborně hodí podmíněné komentáře.
Dále je třeba zajistit, aby se záměna provedla až po načtení celého
HTML dokumentu a vytvoření DOM. Je možnost kód volat událostí
window.onload, ale ta nastane až po stažení všech částí
stránky, tedy i obrázků apod. Výhodnější je použít atribut defer,
který instruuje IE, aby externí skript vykonal právě po
vytvoření DOM:
<!--[if IE]>
<script type="text/javascript"
src="fix_eolas.js"
defer="defer"></script>
<![endif]-->
A ještě malé demo.
To je vše. Litera zákona je tímto naplněna a Flashe běží bez
aktivace.
poznámka: řešení nefunguje s metodou Flash Satay, popsanou kdysi na A List Apart. Tato metoda má vůbec celou řadu záporů, pokusil jsem se tedy najít lepší a validní řešení.
Komentáře » přidat
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře ani hlasovat
Je aspoň nějaká možnost, že i ostatní browsery budou muset blokovat element object?
Jde o to, abychom zase za týden nepředělávali
Ví někdo, jaké je číslo té aktualizace do IE, která způsobuje tu aktivaci? Zjistil jsem, že u mě je taky, tak ji chci odinstalovat.
Už to mám, měla by mít číslo 912945 -
viz http://support.microsoft.com/…px/kb/912945
Pro tento skript to není potřeba, ale při jiném použití by se mohlo hodit, že kromě podmíněných HTML komentářů IE podporuje i podmíněnou kompilaci JavaScriptu.
Na ten clanek o vkladani FLASHe se dost tesim…
Wow paradny trik!
Takze ak to dobre chapem ak je
vypnuty javacsript tak sice uzivatel bude musiet aktivovat (trebars) flashove
prvky, ale inak mu to bude fachcit. ;) Smékám klobouk Davide.
[3] Gringo: Moc jsem nepochopil, proč vydávají záplatu, která mění chování ActiveX a hned k tomu „oddvolávají co již odvolali“ – ale třeba se to bude hodit i ostatním:
http://www.microsoft.com/…details.aspx?…
[7] Pavel Růžička: možná ji vydali moc brzo
[7] Pavel Růžička: Takto to aj planovali, aspon podla toho co sa pisalo na Internete. Ale je to len docasne riesenie.
[5524] No jo, kdyby to alespoň fungovalo, ale MSIE tu aktivaci vyžaduje i tak. On už snad žádný způsob, jak to obejít není aby to fungovalo, chjo…:-(
Nevím, jak Vám, ale mě to nefunguje. Tj. ani ten příklad, co je vystaven zde (aby mě někdo nenapad, že jsem něco udělal špatně)
[10] DavesMan: A máš na mysli, že nefunguje obecně toto řešení nebo konkrétně jeho implementace na mnou odkazovaném webu?
A jinak mám ještě jedno řešení, které by mohlo být nejúčinější. Microsoft by mohl okamžitě vydat novou záplatu, která by vše vrátila do původního stavu nebo by ještě lépe přeinstalovala Exploiter kupříkladu FireFoxem nebo Operou. V tomto druhém případě by informační okno Widows Ufdate mohlo hlásit něco jako: „Bylo zjištěno slabé místo prohlížení obsahu webových serverů…“
A paradoxně by taková „záplata“ měla maximálně nějakých 5MB, což by byl zhruba pouhý pětinásobek průměrné velikosti běžné záplaty Exploitru.
[12] MiKee: Myslím obecně. Nefunguje ani tvoje řešení, ani to, co je prezentováno zde… Prostě od tý doby se mi všude, kde je Flash, zobrazuje ten pitomej rámeček s dotazem na aktivaci. Ať je to seznam, centrum, prostě všechno. Jedině Czech Computer (to logo vlevo nahoře) to nedělá. Jenže to je kompletně celý vložený JavaScriptem.
Ale asi mi nic jiného nezbyde – použít JS + NOSCRIPT. Do NOSCRIPTU to holt vložim normálně – ti co maj JS vypnutý budou muset Flash potvrdit.
[13] DavesMan: Jenže tohle není řešení pro uživatele, ale pro webmastery. Tedy nejprve musí Seznam vložit tento skript do svých stránek a pak teprve bude fungovat bez aktivace.
[14] David Grudl: To já samozřejmě chápu. Taky jsem webmaster. Ale pokud nefunguje ten skript, co máš tady, tak co mám dělat (teď myslím jako webmaster, když nechci aby se na mých stránkách zobrazoval ten pitomej rámeček?)
DavesMan. Tento skript funguje v kombinacii s skriptom v predoslom spote. http://latrine.dgx.cz/…pluginu-v-ie
Sice tam v diskusii tvrdis ze si to skusal, ale dost pochybujem ze si to skombinoval spravne. Tento spot sa zaobera vkladanim flashu do stranky. Predosly spot sa zaobera cisto len aktivaciou flashov na stranke. Podla mna si to neurobil dobre a preto by bolo najlepsie keby este DGX spravil specialny novy clanok kde by tieto metody spojil dokopy. Navrhujem nazov:
Jak obejít aktivování pluginů v IE comments for Complete Dummies
[16] Roman: SAKRA! Kolikrát ještě budu psát, že nefunguje ani to, co je vystaveno tady na dxg.cz jako demo!!!! Do toho já přeci nemůžu zasáhnout a tak to ani nemůžu špatně skombinovat!!! Jestli chceš, dej e-mail, pošlu screenshot.
[17] DavesMan: Aha, tak potom skus zistit v com sa odlisuju tvoje nastavenia IE. Mne to funguje normalne. Idem sa s tym pohrat.
[17] DavesMan: A inak ospravedlnujem sa, prepac. Skus teraz vypatrat v com sa tvoj IE odlisuje. Zaujima ma v com je problem.
[17] DavesMan: Ujisti se, že nic nebrání spuštění JavaScriptu. To znamená povolené skriptování, vypnutí všech blockerů reklam, filtrování HTML obsahu přes firewall atd.
[20] David Grudl: Hele lidi tak nevim. Máme pravdu všichni – na kompu kolegy (2 m ode mě, stejná síť – čili firewall vylučuju) ten trik funguje (akorát při první návštěvě tam fakt dole zůstává, že zbývá načíst ještě jeden objekt … ale to bych ještě překous).
Popup okna máme zakázaný pomocí SP2 oba, jinak nic. Javascript je určitě povolenej – na obou kompech stejně. Verze Flash pluginu na obou stejná (schválně jsem z Macromedie sosnul nejnovější).
Jinak nastavení IE mam vcelku defaultní (akorát zakázaný zmenšování obrázků)
Zkusim povypínat ActiveX doplňky, ale mam pocit, že to je hledání jehly v kupce sena. Kdyby něco, dám vědět. Ale pocit, že jsem „jedinej“ je vcelku OK, aspoň, že lidi to snad uvidí normálně
[21] DavesMan: Myslim ze zaklad uspechu akehokolvek riesenia je to aby sa vykonala aspon jedna z pripustnych alternativ (vratane tej ze by sa aktivacia nevypla
. Ak to nefunguje vobec, tak by bol problem.
Skus pripadne otestovat aj toto http://www.ezop-nr.sk/. Hodil som tam na skusku ten eolas_fix.js
[22] roman: Asi tak. To, že se někde aktivace nevypne, je akceptovatelné (tedy je to lepší než výchozí stav, kdy je aktivace potřeba úplně všude). Naopak řešení stavějící na přítomnosti JavaScriptu nebo nedokumentovaných fíglech situaci spíš zhoršují.
[23] roman: Uz nemusis, podarilo sa mi reprodukovat tu chybu
Pocet zostavajucich poloziek (1) Stacilo zmazat cache a
dat refresh. Vyzera to ze by mohol byt problem s tym „defer“.
[25] roman: S tym „pocet zostavajucich poloziek 1) to po zmazani cache robi aj "demo“, takze vyzera to tak ze pes bude zakopany v tom eolas_fix.jp
[26] roman: Jo, já vim. Dělá to defer. Řešení je, dát to jako funkci onload. Jenže to ten Flash zase problikne. Nevím, co je menší zlo.
BTW.: žádná z „přípustných“ alternativ na tom kompu nefunguje. Aktivaci to chce pořád. Ani to tvoje nejde, ani demo tady, ani příklad na MSDN, ani ten CzechComputer (když jsem psal, že to funguje, byl jsem u jinýho kompu) i když je to vypsaný čístě skriptem. Ten komp je nějakej divnej.
Každopádně teď už u něj nejsem ale zkusim odinstalovat tu aktualizaci a nainstalovat ji pak znovu, uvidíme (btw. zrovna na to kompu jsem ji instaloval ručně z balíčku, na ostatních to bylo automaticky přes Window Update – že by soudruzi z Microsoftu někde udělali chybu…?)
[27] DavesMan: Ja som len zvedavy kedy tento takmer az tajny patch zacne ludom vadit. Uz to stihlo automaticky updatovat aj mne.
[28] Roman: Můžou si ho odinstalovat. Já si zezačátku myslel, že se mi nějak pojebal explorer. Až když jsem to viděl na více kompech a všiml si toho tooltipu o aktivaci, začal jsem pátrat a dorazil sem
[27] DavesMan: Co to zkusit šoupnout bez deferu před
</body>?[29] DavesMan: moje matka ani otec si ho neodinstalují. Tím je to dáno.
[30] David Grudl: Zkoušel jsem. Efekt stejnej jako v
<head>s deferemDost mi vadilo, že to nefunguje v případě, že flash vložen pomoci tohoto kódu:
`
<object type="application/x-shockwave-flash" data="c.swf" width="400" height="300"><param name="movie" value="c.swf" />`Našel jsem řešení:
`var objects = document.getElementsByTagName(„object“);
for (var i=0; i<objects.length; i++) {
objects[i].removeAttribute(„data“);
objects[i].outerHTML = objects[i].outerHTML;
}`
Bohužel, nefunguje to pokud použiji toto:
<param name="FlashVars" value="page=textpage" />parametr sice můžu Flashi předat jako GET přímo v URL, ale mám jen jeden flash umístěn do více stránek. Pokud použiju parametr přes GET, tak se pokaždé načítá celý Flash znovu. S použitím FlashVars se Flash Cachuje a stáhne se pouze 1×… Jdu se na to podívat, jestli to nějak fixnu…
Zde jsem našel poodbné řešení, zajímavé k prostudování…
http://www.sitepoint.com/…ion-issue-ie
Skript mi sice funguje, ale zastaví chod prohlížeče a neuskuteční se mi další skripty.
Stejný problém je i v demu zde uvedeném.
Ve stavové liště IE se objeví hláška:
(Zbývá 1 položka) Otevírání stránky http… atd.
Máte někdo stejný problém?
[27] DavesMan: Kdyby mi jen problikl, tak bych to přežil. On se ale zastaví v polovině, zhasne a už se na stránce neobjeví. Takže vlastně neproblikne. Dělá to IE, Gecko nemá výhrady. (přičemž Opera chce stále kliknutí pro aktivaci prvku). Nepřišel jsi na to, jak se probliknutí zbavit? Díky…
Asi je důležité, jak flash vkládám. Je to takto:
A s načtením do poloviny, myslel jsem probliku. Po načtení stránky se flashe zobrazí a pak zmizí. Když jsem nad ně vložil flash z dema (nahoře), tak zmizel stejně jako osatní, ale zobrazil se zase znovu a fungoval správně. Díky za každou radu…
FUNGUJE SUPER, DÍKY :)
Ahoj, v Opeře se koukám na to demo, a ukazuje se mi tam ten titulek „Klepnutím aktivujete a použiteje ovládaci prvek“
testoval to nekdo v IE7? ja hlasim nefunkcnost – ale zatim to netrapi
[40] Knedle: v IE7 funguje bez zaškobrtnutí.
[39] enoice: ano, v Opeře se zobrazuje titulek, který však nemá vliv na funkčnost. Jak se ho zbavit netuším.
[35] Audant: řešení jsem našel, stáhni si novou verzi skriptu
fix_eolas.js…a ja mám PROBLEM pri použití 2 flash na jednej stránke.
Použitím hore popísaného postupu po načitani stránka blikne a korektne sa spustí len prvý flash (ten, ktorý je vyššie v kóde stránky), zatiaľ čo druhý sa nedokáže načítať celý (len preloader zhruba 7%).
Máte niekto podobný problém alebo aj riešenie? ;)
Díky
Mám dotaz ohledně ie plus flash.stránka ve
flashy načtená v ie se někam uloží(pravděpodobně na cache) a pak když změním
flash animaci a načtu tu stránku znova v ie, změna se neprojeví.až po vymazání
cookies a temporary files.mně by to nevadilo, ale vadí mi to že to tak dělá
uživatelům co stránky prohlíží.neuvidí jejich aktualizace..díky za každou
odpověď
Upravené řešení, které počítá i s elementy
<applet>, publikoval Lokutus.[39] enoice: [41] David Grudl: Nevim jak u ostatnich, ale u me to v opere vliv na funkcnost melo :( takze jsem trochu upravil a vysledek je tento:
Myslim, ze v opere to nefunguje spravne kvuli atributu defer – opera ho ignoruje a spusti skript hned – tedy v okamziku, kdy objekty jeste neexistuji.
Chlape vytrhl si mi trn z paty. Budeš-li potřebovat třeba udělat nějaké logo nenebo nějakou grafickou úpravu, ozvi se na aaress@centrum.cz :)… Díky..
Tak som to skusal a funguje to, akurat ma stve ta jedna zostavajuca polozka na ktoru caka IE… , pouzivam IE 7 a tam to proste nefunguje bez toho aj ked som pouzil posledny fix_eolas.js verzia 3… Skusim pockat na verziu 4
Na tyto problemy doporucuji swfobject.
Resit flash bez javascriptu mi prijde trochu samoucelne – malokdo bude mit tuhle kombinaci (zapnuty flash a vypnuty javascript). Nebal bych se tomuto zlomku uzivatelu zobrazit, ze holt maji smulu (resp. bez javascriptu uvidi alternativni obsah).
Podobne reseni pouzivaji i na youtube, navic se s timto velmi pekne da vyresit alt object (swfobject funguje tak, ze vezme element s danym id a jeho obsah javascriptem nahradi flash objectem – tj. do zmineneho divu dame alternativni obsah a je to.)
Vyhledavace jsou spokojene (vidi alternativni obsah), uzivatele jsou spokojeni (nemusi flash aktivovat, pripadne vidi alternativni obsah) a tvurci webu jsou take spokojeni (je to jednoduche a validni :)
fakt netučím jak ten script vložit a v opere se mi to pořád dějě stím rámečkem,nevím jak mám vytvořit nový script a ten první mi nejde upravit když ho chci otevřít napíše se mi :řádek 8 znak 1 dokument není definováno kód 800A1391 Microsoft JScript-chyba při běhu programu.existuje nějaká možnost púro laika jak se zbavit toho rámečku?v ie je to v pohode ale v opere se mi dělá pořád.Prosím poraďte mi někdo fakt to potřebuju kdyžtak na mail
Dovoluji si znovu oprášit dotaz, který zde již zazněl a jestli se nemýlím, tak stále zde nebyl vyřešen…Výše popsaný způsob funguje celkem bez problémů až do chvíle, kdy je třeba vložit na stránku více flashových aplikací obalených
<object>tagem…V IE se první flash zobrazí správně,ale ty další na sekundu probliknou a pak zmizí…Pro umístění flashe jsem použil na tomto webu uvedený postup a javascript se mi na pohled nezdá špatný…Nevím tedy, v čem je problém? PS-zkuste to sami, jestli Vám budou fungovat 2 flashe na 1 stránce tak, jak s tímto scriptem mají…Od včerejšího dne je problém s aktivováním pluginů definitivně vyřešen. Nikoliv technicky, ale politicky. Microsoft koupil od EOLAS potřebnou licenci a vydal záplatu KB 945007, která aktivování zase ruší.