geek space web solutions

Javascript et Flash avec ExternalInterface + Précautions à prendre avec variables XML

Lundi, 31 Janvier 2011 14:02
script call
On a parfois besoin d'appeler une fonction Javascript depuis le Flash. On utilise pour cela la fonction call() de ExternalInterface.
On peut si on en a besoin passer des variables à la fonction Javascript. Pour cela, il y a quelques petites astuces à savoir.

Prérequis :
1°) Vérifiez que vous avez bien importé la classe ExternalInterface avec :
import flash.external.ExternalInterface;

2°) Dans la balise object associée au fichier SWF intégré à la page HTML, définissez le paramètre suivant :
<param name="allowScriptAccess" value="always" />

Extrait de la documentation sur ExternalInterface :
La classe ExternalInterface est l'API External, une interface de programmation qui permet une communication directe entre ActionScript et le conteneur Flash Player, par exemple une page HTML avec JavaScript.
Adobe recommande l'utilisation de l'API ExternalInterface pour toutes les communications JavaScript-ActionScript.
Cette fonctionnalité remplace la méthode fscommand().


Côté AS3 :
if (ExternalInterface.available) {
ExternalInterface.call("flash_open_squeezebox", tab_linkAnnonce[actual_id]);
}

Côté Javascript :
function flash_open_squeezebox(test) {
alert("flash_open_squeezebox "+test);
}

Lorsque j'ai testé ces fonctions, le code ci-dessus ne fonctionnait pas. Vous pouvez constater que l'argument que je passe à la fonction call() est une variable de type tableau, dans ce tableau j'y avais mis des éléments provenants d'un fichier XML. Selon moi il se produit une erreur par rapport au type de l'argument (la fonction Javascript n'est pas appelée). Pour corriger le propblème, il faut "forcer" le type de la variable que l'on va passer en argument. Dans notre cas, je veux passer une chaîne de caractères, je vais ajouter string(***).

Cette astuce est une double astuce, lol, car forcer le type d'une variable récupérée à partir d'un fichier XML est très conseillé et permet d'éviter pas mal de problèmes comme celui expliqué sur cette page... (Vous pouvez utiliser parseInt pour les entiers...)

Côté AS3 :
if (ExternalInterface.available) {
ExternalInterface.call("flash_open_squeezebox", String(tab_linkAnnonce[actual_id]));
}

Conclusion :
Contrairement à ce qui est dit dans la documentation de ExternalInterface concernant les arguments de la fonction call() :
"Ces paramètres peuvent être de tout type de donnée ActionScript. Si vous faites appel à une fonction JavaScript, les types ActionScript sont automatiquement convertis en types JavaScript."
J'ai pu constater des problèmes selon le type des arguments, il vaut mieux préciser le type des variables transmises à la fonction call()
 

Commentaires  

 
# Invité 27-05-2011 14:32
Un grand merci pour cet article. Je reste interloqué par le qui m'avait complètement échappé.
Répondre | Répondre en citant | Citer
 

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Sections

Éditeur de fichier XML en ligne


"XML Manager" est un éditeur sécurisé permettant d'administrer en ligne un fichier XML.
Il fournit des fonctions avancées de recadrage et de redimensionnement des images...

Sondages

Pensez-vous que le HTML5 puisse complètement remplacer Flash ?
 
Seriez-vous intéressé par un éditeur d'XML en ligne ?
 

Paypal

paypal

Code du plugin Joomla AutoSEO 1.2 par www.geek-space.fr