AS3:Recuperer les variables données par html

Résolu
Bonjour,
Voila je cheche a lancer une application flash nommée exemple.swf d'une page php pour ce j'utilise le code trouvé dans la documentation de adobe :

echo'
<object type="application/x-shockwave-flash" data="/flash/exemple.swf" width="350" height="431">
<param name="play" value="true" />
<param name="movie" value="anim.swf" />
<param name="menu" value="false" />
<param name="quality" value="high" />
<param name="scalemode" value="noborder" />
<param name="flashvars" value="maVar=Salut" />
<p> Texte de remplacement </p>

</object> ';

Jusqu' ici tout va bien mais j'ais un probleme :
je n'arrive pas a recuperer ma variable maVar qui est censée valoir Salut dans mon code en
ActionScript3 , j'avais cru comprendre que celui ci s'obtenait en faisant _root.maVar mais cela ne marche pas, ce serait super sympas si quelq'un pouvait m'aider.Merci a tous ceux qui repondront.
Configuration: Windows XP
Firefox 2.0.0.11

10 réponses

  1. Pour récupérer les flashvar en AS3 on ne passe plus par le root, il faut faire:

    loaderInfo.parameters.mavar à l'endroit ou tu veux récupérer ta variable.

    Pas besoin de passer par les protocole GET et POST.

    Sinon pour mettre tes swf dans une page web proprement utilise swfobject ;)

    Idden
    20
    1. [quote]
      Hello ! bon pour recupérer une variable flashVars en AS3 c est simple :

      var ma_variable:String = root.loaderInfo.parameters.ma_variable;

      ensuite tu utilise "ma_variable" pour ce que tu veux ... voila!
      [/quote]

      Merci nixou, tu m'evites des arrachages de cheveux :)
      8
      1. Thx pour la réponse !
        0
    2. Bonjour !

      J'ai exactement le même problème,
      peut-être va-t-on trouver une solution ensemble :o)

      Voilà le code AS :
      var iris= _root.mainImage;
      textResult = iris;

      je teste dans un texte dynamique voir ce qui passe. Mais toujours UNDEFINED

      Dans le HTML, j'ai ajouté
      <param name="flashvars" value="mainImage=mavariable" />
      et aussi dans le EMBED
      flashvars="mainImage=mavariable"

      J'ai essayé de passer en GET en plaçant la variable derrière le swf (movie.swf?mainImage=mavariable)

      Mais rien n'y fait..
      1
      1. Hello ! bon pour recupérer une variable flashVars en AS3 c est simple :

        var ma_variable:String = root.loaderInfo.parameters.ma_variable;

        ensuite tu utilise "ma_variable" pour ce que tu veux ... voila!
        1
        1. Salut, bizzarement ca ne fonctionne pas chez moi (ca retourne toujours null)..:(

          il me semble pourtant avoir fait le code correctement.
          HTML
          <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload2.macromedia.com/get/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="550" height="400" id="videoPlayer" align="middle">
          	<param name="allowScriptAccess" value="sameDomain" />
          	<param name="allowFullScreen" value="false" />
          	 <param name="flashvars" value="vid=2.flv" />
          
          	<param name="movie" value="videoPlayer.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" />	<embed src="videoPlayer.swf" quality="high" bgcolor="#000000" width="550" height="400" flashvars="vid=2.flv"
          name="videoPlayer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="https://get.adobe.com/flashplayer/" />
          	</object>
          


          et AS3
          vid_ = root.loaderInfo.parameters.vid;
          

          Si quelq'un a une idée
          0
          1. Yo,
            bon j'ai fini par trouver, pour les prochains qui ont ce souci, le truc c'est qu'il faut mettre un truc genre 'FlashVars','vid=toto.flv', dans le AC_FL_RunContent du javascript aussi.
            0
            1. Hey chuck ;) Merci pour ton aide!!

              Dis moi t as pas eu des soucis avec MACs? mon code marche a merveille mais sur mac, tout deconne...

              Quelqu un aurait une piste?

              meme en appelant le swif depuis le browser par www.monsite.com/monSwif.swf?id=40

              incroyable non??

              Pour info j utilise le code que tu fourni ci dessus (merci encore d ailleurs )

              Encore un peu d'aide serait appreciee! ;) Merci!
              0
          2. effectivement en AS2 pour envoyer une variable vers flash ce que tu a fait est juste mais n'oubli pas de mettre ta flashvar dans le EMBED également.

            ensuite sous flash pour recuperer ta valeur tu fais

            effectivement _root.maVar
            -1
            1. aurait je raté quelque chose ?
              car chez moi cela ne fonctionne pas , j'ai 1 anim dans laquelle la variable doit s'afficher et sous firefox et ie rien ne s'affiche je ne comprend pas ou est le problème :
              AS3 :
              var ma_variable:String =root.loaderInfo.parameters.firstName;
              cette variable est associé a une plage texte dans l'anim qui doit afficher la valeur de la chaine.

              le code html

              <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
              <title>testvar</title>
              <script language="JavaScript" type="text/javascript">
              <!--
              //v1.7
              // Flash Player Version Detection
              // Detect Client Browser type
              // Copyright 2005-2008 Adobe Systems Incorporated. All rights reserved.
              var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
              var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
              var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
              function ControlVersion()
              {
              var version;
              var axo;
              var e;
              // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
              try {
              // version will be set for 7.X or greater players
              axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
              version = axo.GetVariable("$version");
              } catch (e) {
              }
              if (!version)
              {
              try {
              // version will be set for 6.X players only
              axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");

              // installed player is some revision of 6.0
              // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
              // so we have to be careful.

              // default to the first public version
              version = "WIN 6,0,21,0";
              // throws if AllowScripAccess does not exist (introduced in 6.0r47)
              axo.AllowScriptAccess = "always";
              // safe to call for 6.0r47 or greater
              version = axo.GetVariable("$version");
              } catch (e) {
              }
              }
              if (!version)
              {
              try {
              // version will be set for 4.X or 5.X player
              axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
              version = axo.GetVariable("$version");
              } catch (e) {
              }
              }
              if (!version)
              {
              try {
              // version will be set for 3.X player
              axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
              version = "WIN 3,0,18,0";
              } catch (e) {
              }
              }
              if (!version)
              {
              try {
              // version will be set for 2.X player
              axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
              version = "WIN 2,0,0,11";
              } catch (e) {
              version = -1;
              }
              }

              return version;
              }
              // JavaScript helper required to detect Flash Player PlugIn version information
              function GetSwfVer(){
              // NS/Opera version >= 3 check for Flash plugin in plugin array
              var flashVer = -1;

              if (navigator.plugins != null && navigator.plugins.length > 0) {
              if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
              var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
              var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
              var descArray = flashDescription.split(" ");
              var tempArrayMajor = descArray[2].split(".");
              var versionMajor = tempArrayMajor[0];
              var versionMinor = tempArrayMajor[1];
              var versionRevision = descArray[3];
              if (versionRevision == "") {
              versionRevision = descArray[4];
              }
              if (versionRevision[0] == "d") {
              versionRevision = versionRevision.substring(1);
              } else if (versionRevision[0] == "r") {
              versionRevision = versionRevision.substring(1);
              if (versionRevision.indexOf("d") > 0) {
              versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
              }
              }
              var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
              }
              }
              // MSN/WebTV 2.6 supports Flash 4
              else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
              // WebTV 2.5 supports Flash 3
              else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
              // older WebTV supports Flash 2
              else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
              else if ( isIE && isWin && !isOpera ) {
              flashVer = ControlVersion();
              }
              return flashVer;
              }
              // When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
              function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
              {
              versionStr = GetSwfVer();
              if (versionStr == -1 ) {
              return false;
              } else if (versionStr != 0) {
              if(isIE && isWin && !isOpera) {
              // Given "WIN 2,0,0,11"
              tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
              tempString = tempArray[1]; // "2,0,0,11"
              versionArray = tempString.split(","); // ['2', '0', '0', '11']
              } else {
              versionArray = versionStr.split(".");
              }
              var versionMajor = versionArray[0];
              var versionMinor = versionArray[1];
              var versionRevision = versionArray[2];
              // is the major.revision >= requested major.revision AND the minor version >= requested minor
              if (versionMajor > parseFloat(reqMajorVer)) {
              return true;
              } else if (versionMajor == parseFloat(reqMajorVer)) {
              if (versionMinor > parseFloat(reqMinorVer))
              return true;
              else if (versionMinor == parseFloat(reqMinorVer)) {
              if (versionRevision >= parseFloat(reqRevision))
              return true;
              }
              }
              return false;
              }
              }
              function AC_AddExtension(src, ext)
              {
              if (src.indexOf('?') != -1)
              return src.replace(/\?/, ext+'?');
              else
              return src + ext;
              }
              function AC_Generateobj(objAttrs, params, embedAttrs)
              {
              var str = '';
              if (isIE && isWin && !isOpera)
              {
              str += '<object ';
              for (var i in objAttrs)
              {
              str += i + '="' + objAttrs[i] + '" ';
              }
              str += '>';
              for (var i in params)
              {
              str += '<param name="' + i + '" value="' + params[i] + '" /> ';
              }
              str += '</object>';
              }
              else
              {
              str += '<embed ';
              for (var i in embedAttrs)
              {
              str += i + '="' + embedAttrs[i] + '" ';
              }
              str += '> </embed>';
              }
              document.write(str);
              }
              function AC_FL_RunContent(){
              var ret =
              AC_GetArgs
              ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
              , "application/x-shockwave-flash"
              );
              AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
              }
              function AC_SW_RunContent(){
              var ret =
              AC_GetArgs
              ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
              , null
              );
              AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
              }
              function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
              var ret = new Object();
              ret.embedAttrs = new Object();
              ret.params = new Object();
              ret.objAttrs = new Object();
              for (var i=0; i < args.length; i=i+2){
              var currArg = args[i].toLowerCase();
              switch (currArg){
              case "classid":
              break;
              case "pluginspage":
              ret.embedAttrs[args[i]] = args[i+1];
              break;
              case "src":
              case "movie":
              args[i+1] = AC_AddExtension(args[i+1], ext);
              ret.embedAttrs["src"] = args[i+1];
              ret.params[srcParamName] = args[i+1];
              break;
              case "onafterupdate":
              case "onbeforeupdate":
              case "onblur":
              case "oncellchange":
              case "onclick":
              case "ondblclick":
              case "ondrag":
              case "ondragend":
              case "ondragenter":
              case "ondragleave":
              case "ondragover":
              case "ondrop":
              case "onfinish":
              case "onfocus":
              case "onhelp":
              case "onmousedown":
              case "onmouseup":
              case "onmouseover":
              case "onmousemove":
              case "onmouseout":
              case "onkeypress":
              case "onkeydown":
              case "onkeyup":
              case "onload":
              case "onlosecapture":
              case "onpropertychange":
              case "onreadystatechange":
              case "onrowsdelete":
              case "onrowenter":
              case "onrowexit":
              case "onrowsinserted":
              case "onstart":
              case "onscroll":
              case "onbeforeeditfocus":
              case "onactivate":
              case "onbeforedeactivate":
              case "ondeactivate":
              case "type":
              case "codebase":
              case "id":
              ret.objAttrs[args[i]] = args[i+1];
              break;
              case "width":
              case "height":
              case "align":
              case "vspace":
              case "hspace":
              case "class":
              case "title":
              case "accesskey":
              case "name":
              case "tabindex":
              ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
              break;
              default:
              ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
              }
              }
              ret.objAttrs["classid"] = classid;
              if (mimeType) ret.embedAttrs["type"] = mimeType;
              return ret;
              }
              // -->
              </script>
              </head>
              <body bgcolor="#ffffff">
              <!--URL utilisées dans l'animation-->
              <!--texte utilisé dans l'animation-->
              <!--
              <p align="center"></p>
              -->
              <!-- saved from url=(0013)about:internet -->
              <script language="JavaScript" type="text/javascript">
              AC_FL_RunContent(
              'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0',
              'width', '550',
              'height', '400',
              'src', 'testvar',
              'quality', 'high',
              'pluginspage', 'http://www.adobe.com/go/getflashplayer_fr',
              'align', 'middle',
              'play', 'true',
              'loop', 'true',
              'scale', 'showall',
              'wmode', 'window',
              'devicefont', 'false',
              'id', 'testvar',
              'bgcolor', '#ffffff',
              'name', 'testvar',
              'menu', 'true',
              'allowFullScreen', 'false',
              'allowScriptAccess','sameDomain',
              'movie', 'testvar',
              'salign', ''
              'FlashVars','firstName=Nick&lastName=Danger'
              ); //end AC code
              </script>
              <noscript>
              <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload2.macromedia.com/get/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="550" height="400" id="testvar" align="middle">
              <param name="allowScriptAccess" value="sameDomain" />
              <param name="allowFullScreen" value="false" />
              <param name="movie" value="testvar.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> <param name="flashVars" value="firstName=Nick&lastName=Danger" <embed src="testvar.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="testvar" flashVars="firstName=Nick&lastName=Danger" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="https://get.adobe.com/flashplayer/?loc=fr" />
              </object>
              </noscript>
              </body>
              </html>

              si quelqu'un pouvait trouver la solution a ce porbléme nébuleu
              -1
              1. see this sample
                http://blog.flexexamples.com/2007/08/07/grabbing-flashvars-from-the-embedding-html-template/
                it's the right one
                -2
                1. fau voir dans le Actionscript 3 la méthode d'envoi vers le fichier php,car le fichier .swf et php communique et pour flash,il a classe loadvars(en As2) je ne sait pas encore en As3,pour envoyer ses variables à php.
                  les methodes :"POST" et "GET"
                  -4