Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

swf communiquants

Compatible ActionScript 3. Cliquer pour en savoir plus sur les compatibilités.Par monz (Stéphane Monnet), le 02 juin 2008

Passer des variables de swf à swf

Alors que la documentation en AS2 était assez claire, passer des variables d’un swf à un autre en AS3 m’est apparu au premier abord comme plus complexe. Si j’en juge par les demandes postées sur les forum, je n’ai pas été le seul dépaysé. Mais je crois que c’est surtout la doc qui n’est pas très claire.

Ce petit tuto abordera donc trois cas basiques :

  1. passer une variable depuis un swf dans un swf loadé]]
  2. passer une variable depuis un swf via une URL à un swf
  3. passer une variable de swf à swf via les sharedObject

Ce petit tuto s’adresse avant tout à ceux qui, comme moi, ont gardé quelques mauvais réflexes AS2 et ne passent pas tout par leurs classes, ce qui leur éviterait dans de nombreux cas ces manipulations…

Les possibilités

1. Passer une variable depuis un swf dans un swf loadé

Première chose à faire : déclarer sa variable dans le swf appelant (celui qui va loader l’autre swf).

var maVar:String ;\\ 
maVar = "je suis passé par là";

Ensuite, il suffit de loader son swf de façon traditionnelle. Je ne m’embarrasse pas ici du listener OnComplete, son utilisation n’étant pas notre propos.

var adresse:URLRequest = new URLRequest("testVar.swf");\\  
var loader:Loader = new Loader();\\ 
loader.load(adresse);\\ 
addChild (loader);\\

Dans le swf appelé (nommé dans le script précédant testVar), il me faut récupérer ma variable maVar :String. La méthode est simple et ne requiert qu’un bon ciblage. Commençons par créer une variable de réception. Elle peut porter ou non le même nom que la variable du swf appelant.

//testVar.swf\\ 
var maVar2 :String ;\\

Pour la récupération, je vous conseille une petite routine de ce type afin d’identifier les problèmes de chargement.

try\\ 
{\\ 
// on récupère la variable maVar du swf appelant\\ 
(maVar2=this.parent.parent["maVar"]);\\ 
}\\ 
// on récupère l’erreur si la variable n’est pas passée\\ 
catch (e:Error)\\ 
{\\ 
// on affiche l’erreur, s’il y a lieu\\ 
trace ("zut : "+e);\\
}\\
//  on affiche la variable récupérée dans le swf appelant, si tout s’est bien passé\\
trace(maVar2); //  « je suis passé par là »\\

Le ciblage se décompose comme suit : this (le swf chargé), parent (le loader du swf appelant), parent (le root du swf appelant).

Voilà. C’est tout.

2. Passer une variable depuis un swf via une URL dans un swf

Entendons-nous bien, la configuration est la suivante : vous êtes dans un swf chargé directement dans un navigateur ou inclus dans une page HTML et vous voulez envoyer la variable (ou les variables) dans un swf chargé directement dans un navigateur ou inclus dans une page HTML. Le passage se fait par l’URL (méthode GET ou POST).

Cette fois, la variable que nous voulons passer sera déclarée à l’aide de la classe URLVariables (classe liée à URLRequest).
Dans le swf où nous avons notre variable, comme nous allons utiliser la commande navigateToURL pour accéder au swf récepteur, nous faisons appel à la classe URLRequest.

var adresse:URLRequest = new URLRequest("testVar2.swf");

Dans cet objet que nous avons appelé ‘adresse’, nous allons inclure nos variables au moyen de :

var mesVars:URLVariables = new URLVariables();\\
mesVars.maVar1 = "je suis passé par là";

Nous pouvons en placer plusieurs. Une fois nos variables déclarées, nous les ajoutons à notre ‘adresse’ :

adresse.data = mesVars;

Dernière commande, pour dire à notre swf de charger la page contenant notre swf récepteur.

navigateToURL(adresse);

Regardons maintenant comment notre variable est récupérée dans notre swf de destination. C’est, il faut bien le dire, simplissime.
Pour ceux qui ont l’habitude de charger des éléments externes à leur swf, pas de nouveautés. Nous allons utiliser la classe loaderInfo (elle est générée dans tous swf), et une propriété particulière : parameters.

//testVar2.swf\\
var mesRecups:Object = loaderInfo.parameters;

Notre objet ‘mesRecups’ a récupéré nos variables. Pour accéder à elles, on utilise les mêmes commandes que dans un tableau :

mesRecups.maVar1 ; // « je suis passé par là »

La syntaxe suivante fonctionne également :

mesRecups['maVar1'];// "je suis passé par là"

Voilà. En deux lignes dans le swf de destination, le tour est joué.

3. Passer une variable de swf à swf via les sharedObject

L'utilisation des sharedObject ne se limitent pas à un simple passage de variable, mais, pour qui veut passer une variable entre swfs, ils restent un moyen simple (eh oui !) et efficace. La seule contrainte est que l’ordinateur de l’utilisateur accepte les cookies (ce qui est quand même courant).

Donc, pour créer un shared object (un petit fichier qui contiendra notre variable et sera persistant sur l’ordinateur de l’utilisateur et donc transmissible), c’est simple :

Dans mon swf n°1 :

var mesVars:SharedObject = SharedObject.getLocal("moncookie","/");\\
mesVars.data.maVar1 = "je suis passé par là";

Rien de plus.

Dans mon swf n°2 :

var mesVars:SharedObject = SharedObject.getLocal("moncookie", "/")\;

Ici, la seule contrainte est d’aller chercher le SharedObject du swf n°1, appelé ‘moncookie’ et la clé (‘maVar1’) qui permet d’identifier la variable qui nous intéresse. Il est également conseillé de renseigner le chemin du SharedObject (”/”). Dans mon script, j’ai repris mesVars comme nom de SharedObject, mais c’est facultatif, du moment que ‘moncookie’ et ’maVar1’ sont correctement identifiés et que le chemin est bien le même.

mesVars.data.maVar1; // « je suis passé par là »

Conclusion

Avec toutes ces façons de passer des variables, elles vont fuser dans la webOsphère.