Microsoft čelí žalobě firmy EOLAS kvůli jistým softwarovým patentům a i když soudní spor zatím neskončil, soud Microsoftu předběžně nařídil, aby změnil chování ActiveX prvků v prohlížeči MSIE, kterého se patent týká.
Microsoft vydal update, který je součástí automatických aktualizací, a ten mění chování MSIE. Co přesně? Prvky ActiveX se na stránce zaktivní až po kliknutí myši. Například takový Flash banner se animuje, ale pro interakci s uživatelem je jej nutné nejdříve aktivovat kliknutím a až poté můžete kliknout (provést akci), je tedy nutné kliknout 2×. Ale kolik uživatelů asi odradí, když kliknou a nic se nebude dít?
Samozřejmě náprava je možná, ale kolik webmasterů ji bude muset asi provést na desítkách tisíc stránek, scriptů a aplikací, aby prvky ActiveX fungovaly opět korektně?
Jsou 2 možnosti nápravy, které zvěřejňuje šéf-webmaster Seznamu Chose na svém blogu:
Řešení 1 – vložení objektu přes externí skript
Pokud je do stránky ActiveX objekt vložen z externího javascriptu, vše funguje bez problému.
<!-- 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í znovuvlož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, popisuje ho 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ží.
<!-- 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 byl skript opravdu univerzální, musel být drobně rozšířen:
// (c) David Grudl aka -dgx-
//
// more info: http://www.dgx.cz/knowhow/eolas-workaround/
//
// updated by Josef Šíma - Chose
//
http://www.chose.cz/weblog/index.php/jak-obejit-nefunkcni-flashe-po-aktualizaci-ie/
//
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;
}
}
Takto upravený skript má drobnou nevýhodu – pokud ve stránce máte flash vložený přes object s embedem, dojde ke dvojitému znovuvložení (jednou výměna object, podruhé výměna embed). Ošetřit to je seice možné, ale to už záleží na vaší šikovnosti. Nebo můžete použít jednodušší (původní) verzi skriptu od Davida Grudla.
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 znovuvlož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ší.
Další informace najdete zde: