Internet Explorer, Blocco degli ActiveX
Possibili rimedi al distruttivo update di Microsoft
Inserito il 25-05-2006
Come qualcuno avrà notato recentemente, un nuovo update di Windows, in particolare riferito al tanto popolare, quanto improponibile Internet Explorer, rende infruibili i contenuti legati ai controlli ActiveX, tra cui ovviamente i nostri beneamati Swf. In pratica per attivarli viene richiesto all'utente un ulteriore click sullo schermo, per proseguire poi la normale navigazione.
Chiaro è che per un navigatore smaliziato il problema non sussiste perchè sapendo a cosa quei controlli si riferiscono, proseguirà senza problema nella navigazione, il problema sta sulla percentuale decisamente più numerosa, che sospetterà (giustamente) ad uno dei soliti trucchetti per la trasmissione di dialer, virus e quant'altro di sporco e malsano ci sia in giro per la rete.
Lungi da questo articolo, stare a fare critica (che nel caso sarebbe solo negativa) su questo update, mi limito a riportare i link agli articoli e soluzioni già segnalate in altri forum, riguardanti il nuovo, destabilizzante problema.
Per saperne di più:
Supporto Tecnico Microsoft - Aggiornamento per ActiveX in Internet Explorer
http://support.microsoft.com/kb/912945/it-it'
Macromedia DevNet - Active Content Update Article (in inglese)
http://www.macromedia.com/dev...letter.html
Soluzioni al problema:
SWFObject (in inglese)
http://blog.deconcept.com/swfobject/
http://blog.deconcept.com/2005/12/15/inter...e-flash-plugin/
SWFObject (traduzione in italiano)
http://www.magnificaweb.it/flashobject/
Patch per Flash8 e FlashMx2004
http://www.macromedia.com/sup...ads.html#flash8
Per l'SWFObject riporto un post trovato in un forum, che descrive i passaggi essenziali per far andare i filmati anche con IE.
<script type="text/javascript" src="flashobject.js"></script>
<div id="flashcontent">
Mio movie alla Matrix!
</div>
<script type="text/javascript">
var fo = new FlashObject("nomeFile.swf", "titolo", "400", "50", "6", "#000000");
fo.write("flashcontent");
</script><script type="text/javascript" src="http://www.tuosito.com/flashobject.js"></script>
<div id="flashcontent">
Testo alternativo nel caso non si riesca a caricare il filmato.
</div>
<script type="text/javascript">
var fo = new FlashObject("nomeFile.swf", "titolo", "400", "50", "6", "#000000");
fo.write("flashcontent");
</script>...mi sembra tutto!!
Update
Altro interessante post scritto in un forum dall'utente andr3a, direi più completo ed esplicativo, oltre che ottimo a livello tecnico.
non l'ho ovviamente implementato come visto qua e la perchè preferisco sempre ottimizzare dove mi è possibile ( soprattutto se non comporta una perdita di tempo oltre i 2 minuti :stordita: )
Questa è stata la mia soluzione
markedup per un swf al 100%
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML lang="en">
<HEAD>
<TITLE>ELICA COLLECTION</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="author" CONTENT="Andrea Giammarchi 4 CANENERO Advertising">
<META NAME="copyright" CONTENT="ELICA">
<META NAME="code_Language" CONTENT="PHP4">
<META NAME="robots" CONTENT="ALL">
<STYLE TYPE="text/css">
html, body {
margin: 0px;
padding: 0px;
width: 100%;
height: 100%;
font-family: Verdana, Helvetica, sans-serif;
font-size: 8pt;
color: #FFF;
background: #0F0D12;
}
#flash {
width: 100%;
height: 100%;
text-align: center;
}
a {
display: block;
text-decoration:none;
}
img {
margin-top: 25%;
border: 0;
}
</STYLE>
<SCRIPT TYPE="text/javascript" SRC="content.js"><!--// W3C safe string for content //--></SCRIPT>
<SCRIPT TYPE="text/javascript" SRC="swfobject.js"><!--// (C) SWF Object 1.4.1 //--></SCRIPT>
<SCRIPT TYPE="text/javascript">onload = function(){(new FlashObject("black.swf", "ELICA Collection", "100%", "100%", "8", "#0F0D12")).write("flash")};</SCRIPT>
</HEAD>
<BODY>
<SCRIPT TYPE="text/javascript"><!--//
document.write(content);
//--></SCRIPT>
<NOSCRIPT>
<DIV ID="flash">
<OBJECT TYPE="application/x-shockwave-flash" DATA="black.swf" WIDTH="100%" HEIGHT="100%">
<PARAM NAME="movie" VALUE="black.swf" />
<A
HREF="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&promoid=BIOW"
TITLE="Get Adobe Flash Player"
>
<IMG
SRC="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"
ALT="Get Adobe Flash Player"
WIDTH="88"
HEIGHT="31"
/>
</A>
</OBJECT>
</DIV>
</NOSCRIPT>
</BODY>
</HTML>questo markedup passa liscio come l'olio il validatore W3, per quello che conta (niente ma fa fico :D) e passa liscio come l'olio anche il più bastardo WATCHFIRE per WAI-AAA (lo so che non significa niente ... se non che almeno rispetta un pò tutti gli utenti se non altro per markedup).
Il sistema fa questo:
scrive via JS il contenuto del documento per chi ha JS abilitato ... allo stesso tempo nel JS scritto c'è il link al flash player per chi non ha Flash 8 (non ho idea di cosa rilasci FlashObject quando non trova il player) ed allo stesso tempo utilizza il metodo satay per chi non ha JS abilitato e scrive il link al player pe chi non ha Flash 8.
Il contenuto del file content.js è banalmente questo:
var content = '<DIV ID="flash"> '+ '<A '+ ' HREF="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&promoid=BIOW" '+ ' TITLE="Get Adobe Flash Player" '+ '> '+ ' <IMG '+ ' SRC="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" '+ ' ALT="Get Adobe Flash Player" '+ ' WIDTH="88" '+ ' HEIGHT="31" '+ ' /> '+ '</A> '+ '</DIV>';
messo in un file esterno per non avere noie col validatore del W3.
Spero che come soluzione sia completa e sia uno spunto per chi ancora (come me fino a ieri) non sa come raggirare il problema del bottone.
:ciauz:
[edit] dimenticavo ... per il metodo satay e in generale per il sito ho usato il primo swf di nome black.swf con questa sintassi sull'unico keyframe:
if(!getSWFVersion || getSWFVersion() < 8)
getURL("http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&promoid=BIOW", "_self");
else
loadMovieNum("mainmovie.swf", 0);
che altro non fa, per chi non ha js abilitato ma magari ha un player inferiore alla 8, che reindirizzare l'utente al sito adobe per scaricare il player
Update 2
Un ulteriore update necessario a spiegare a chi, come me, ha deciso di intraprendere la via dell'XHTML e si potrebbe trovare con un inconveniente nel caso in cui il javascript del browser con cui viene visualizzata la pagina che contiene il filmato, sia disabilitato.
Sempre utilizzando lo stesso metodo già descritto da andrea nel precedente update, questo è l'HTML da utilizzare nella pagina che ospiterà il nostro filmato
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>V2online - Personal Portfolio </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<style type="text/css">
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background-color:#FFFFFF;
}
div#container {
overflow: hidden;
width: 100%;
height: 100%;
}
noscript {
display: block;
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
object#filmato {
width: 100%;
height: 100%;
}
</style>
<script type="text/javascript" src="content.js"><!--// W3C safe string for content //--></script>
<script type="text/javascript" src="swfobject.js"><!--// (C) SWF Object 1.4.1 //--></script>
<script type="text/javascript">onload = function(){(new FlashObject("cont2.swf", "V2online", "100%", "100%", "8", "#FFFFFF")).write("container")};</script>
</head>
<body>
<script type="text/javascript"><!--//
document.write(content);
//--></script>
<noscript>
<div id="container">
<object id="filmato" type="application/x-shockwave-flash" data="cont2.swf">
<param name="movie" value="cont2.swf" />
</object>
</div>
</noscript>
</body>
</html>In pratica non facciamo altro che dichiarare anche un foglio di stile particolare per il tag <noscript> in modo da trasformarlo da elemento "inline" a elemento "block" così da poter utilizzare le dimensioni in percentuale e mantenere l'swf a tutto schermo sul browser.
