Flash et javascript : externalInterface – appeler une boite modal contenant une vidéo youtube depuis flash
11 février 2009 par Niums dans Action script
Dans cette exemple, nous allons créer une animation flash dans laquelle nous allons écrire l’identifiant youtube de la vidéo.
Ensuite au click après vérification du nombre de caractères, une boite modal, genre « lightbox », va s’ouvrir avec la vidéo Youtube voulu.
Mais avant ca, une petite explication sur ExternalInterface
ExternalInterface
La classe ExternalInterface permet les communications entre actonscript et le conteneur flash. Cette classe est recommandée pour les communications entre javascript et actionscript. Mais attention cette méthode n’est disponible que depuis flash 8. Avant cette version il faut utiliser fscommand.
Du flash, il est possile d’appeler les fonctions javascript d’une page HTML en passant des arguments de tout type (String, boolean, Number, funtion, etc…) et de recevoir une valeur de retour pour un appel. Depuis le HTML, vous pouvez appeler une fonction actionscript dans Flash Player grace au javascript. La fonction ActionScript peut renvoyer une valeur que JavaScript reçoit immédiatement comme valeur de retour de l’appel.
Afficher une alerte
Javascript :
alert(parametre);
}
Actionscript
import flash.external.*;
//action sur le bouton
btn_mc.onRelease = function() {
ExternalInterface.call("hello", "Hello vous!");
};
Flash boite modal et youtube
Avant de commencer récupérer jquery et thickbox.
Le premier est la librairie javascript bien connu et le second nous crééra la boite modal ou lightbox.
Ensuite aller sur youtube et prenez une vidéo au hasard. Sur la page de la vidéo vous avez son permalien. Exemple :
http://www.youtube.com/watch?v=vPTby0N11Ss
l’id de la video est les caractères suivant vPTby0N11Ss
Le but en fait ici est de voir comment appeler la lightbox depuis flash et au dessus du flash.
Nous aurons besoin de 3 éléments
- index.php : la page qui contient le fichier flash
- flash-modal-video.swf : le flash qui appelle la boite modal et la vidéo youtube défini d’après son ID
- popup.php : la page qui contient la vidéo youtube dont le paramètre : video_Id sera envoyé via l’url ($_GET)
index.php
On intégre les éléments dont nous avons besoin : js et css
On intégre le flash
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="false" />
<param name="quality" value="high" />
<param name="bgcolor" value="#000000" />
<param name="wmode" value="transparent" />
<param name="src" value="flash-modal-video.swf" />
<param name="name" value="flash-modal-video" />
<param name="align" value="middle" />
<param name="allowfullscreen" value="false" />
</object>
flash-modal-video.swf
Le flash principal :
- Sur la scène une zone saisie dont le nom d’occurence est « saisie »
- Un movieclip qui servira de bouton dont le nom d’occurence est « btn »
- un champ de texte dynamique dont le nom d’occurence est « info »
import flash.external.ExternalInterface;
this.btn.onRelease = function(){
//on vérifie que le champ de saisie n’est pas vide et que sa longueur est comprise entre 12 et 10 caractère.
if (saisie.text eq "" || saisie.length > 12 || saisie.length < 10 ) {
info.text = "Ecrivez l’ID de la vidéo comme ci-dessous en rouge";
// Si ce n’est pas le cas
} else {
info.text = "Bon visionnage";
// on appelle la boite modal
// remarquez la transmission de la variable videoId qui se fait avant les autres variables spécifiques à thickbox
flash.external.ExternalInterface.call("tb_show" , null ,"popup.php?videoId="+[saisie.text]+"&KeepThis=true&TB_iframe=true&height=500&width=800" , false);
}
}
popup.php
On récupère la variable nous renseignant sur l’Id de la vidéo youtube et on affiche celle si s’il n’y pas d’erreur.
<?php
if (isset($_GET[‘videoId’]))
{
?>
<div align="center">
<object width="640" height="420">
<param name="movie" value="http://www.youtube.com/v/<?php echo $_GET['videoId']; ?>&hl=fr&fs=1&rel=0&color1=0×5d1719&color2=0xcd311b"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/<?php echo $_GET['videoId']; ?>&hl=fr&fs=1&rel=0&color1=0×5d1719&color2=0xcd311b"
type="application/x-shockwave-flash"
allowscriptaccess="always"
allowfullscreen="true"
width="640"
height="420">
</embed>
</object>
</div>
<?php
}
else
{
echo "oups petit probeleme";
}
?>
PS : Un problème rencontré sous firefox : Lors de mes test le flash envoyait bien les informations mais firefox n’en tenait pas compte. Si je met un code xhtml valide lors de l’insertion du flash il n’y aura pas la balise Embed. Malheureusement Firefox en a besoin dans ce cas :
Code xhtml valide
<param name="wmode" value="transparent" />
<param name="src" value="externalInterface.swf" />
</object>
Et voici le code compris par tous
<param name="wmode" value="transparent" />
<param name="src" value="externalInterface.swf" />
<param name="quality" value="high" />
</object>
Voila +++
Continuez votre lecture avec
- Article suivant : Toujours pas de HTC G1 pour la France…. jusqu’au 8 avril en tout cas. Merci Orange (MAJ)
- Article précédent : Podcast 6 – King Of Sorrow
Articles similaires
- Envoyer des informations à google analytics de flash avec getURL ou ExternalInterface
- Charger une vidéo au hasard dans votre player flash
- Afficher masquer une image au dessus d’un flash
- La vidéo avec NetStream et FlashVars : contrôler votre player en passant des variables via html
- Exporter une animation swf Flash en vidéo vcd et dvd



