Une récente mise à jour du navigateur Internet Explorer 6 de Microsoft empêche par défaut l’exécution automatique de contrôles ActiveX comme le plugin Adobe Flash Player par exemple. Pour l’utilisateur, cela se traduit par la nécessité d’activer l’objet ActiveX d’un clic de souris avant de pouvoir commencer à l’utiliser.
Pour la petite histoire, c’est à cause d’un procès initié par la société Eolas contre Microsoft que ce dernier a été contraint de mettre en place cette limitation technique ; en effet, Eolas detient un brevet décrivant la mise en oeuvre d’un composant ActiveX dans une page web sans action spécifique utilisateur ( !).
Au vu du nombre de sites utilisant cette technologie, une technique a rapidement été mise au point pour contourner cette limitation.
L’astuce consiste à utiliser javascript depuis un fichier externe pour afficher notre objet Flash plutôt que de l’invoquer directement en [HTML|HyperText Markup Language]. Au lieu d’avoir ce genre de chose en [XHTML|eXtended HyperText Markup Language] :
<object type="application/x-shockwave-flash
data="content.swf"
width="400" height="300">
<param name="movie" value="content.swf" />
<img src="noflash.gif" width="400" height="300" alt="Texte alternatif" />
</object>
Nous avons désormais, dans le code HTML de la page :
<script type="text/javascript" src="insert_flash.js"></script>
<script type="text/javascript">
insertFlash() ;
</script>
Et dans le fichier insert_flash.js
:
function insertFlash()
<em>document.write('<object type="application/x-shockwave-flash" ') ;
document.write('data="content.swf" ') ;
document.write('width="400" height="300">') ;
document.write('<param name="movie" value="content.swf" />') ;
document.write('<img src="noflash.gif" width="200" height="100" alt="Texte alternatif" />') ;
document.write('</object>') ;
</em>
</script>
Bien évidemment, l’obligation de recourir à javascript pour afficher l’objet est une limitation importante, que la balise noscript
se chargera d’atténuer :
<script type="text/javascript" src="insert_flash.js"></script>
<script type="text/javascript">
insertFlash() ;
</script>
<noscript>
<object type="application/x-shockwave-flash
data="content.swf"
width="400" height="300">
<param name="movie" value="content.swf" />
<img src="noflash.gif" width="400" height="300" alt="Texte alternatif" />
</object>
</noscript>
Le contenu présent dans cette dernière balise ne sera affiché qu’en l’absence de javascript sur le navigateur ; il sera alors nécessaire d’activer l’objet d’un clic.
sébastien
22 avril 2009
Il y a juste une toute petite erreur (d’inattention à mon avis). C’est à la fin de la fonction insertFlash il faut supprimer la balise script en dessous de la fonction insertFlash qui va faire beuger le programme.
En tout cas génial ce code ! Merci à celui qui l’a écrit, c’est très bien expliqué!