Variabili dinamiche da HTML a SWF (anche per Flash4)

Spero che non sia un argomento troppo vecchio, ma è una cosa semplice ed utilissima.
Per esempio, pensate di dover scrivere una miriade di testi, tutti con lo stesso stile accattivante e grafica “cool”. Cosa fate? Li fate uno ad uno!
Ma c’è un opzione che si può usare anche con file SWF di FL4.

Per farla semplice, dal codice html possiamo dire che valore associare ad una variabile all’interno del SWF.

Per fare un esempio: …

Apri un nuovo file di Flash (“prova.fla“), crea un campo di testo dinamico vuoto ed associalo alla variabile txt. Esporta anche il file HTML e apri ques’ultimo con un editor. Nelle righe atte alla pubblicazione del SWF, dopo “prova.swf” (in due punti) aggiungi “?txt=VARIABILE“.

Apri la pagina html nel browser, e vedrai che, anche se nel file FLA non era impostato il valore della variabile, e tu hai esportato un file SWF praticamente vuoto, ora tu vedi scritto “VARIABILE“.

Bello, eh?! 😀

Se hai due o più variabili, basta aggiungere “&” tra un valore e quello successivo.

…e sta solo alla vostra fantasia usare questo metodo per aggiornare e modificare rapidamente contenuto Flash, senza toccare il file sorgente.

link

9 pensieri su “Variabili dinamiche da HTML a SWF (anche per Flash4)”

    1. Ciao Ivan,
      …a parte il fatto che questo “tutorial” risale al PALEOLITICO (parlando in termini di Flash) perché è del 2006, quando Flash era alla versione 4…
      Senza offesa, ma forse hai sbagliato qualcosa, perché il sistema è testato ormai da molto tempo.
      Se vuoi approfondire, puoi andare a vedere qua:
      http://kb2.adobe.com/cps/164/tn_16417.html
      Oppure posta qui i codici che hai usato, e vediamo.
      (Attenzione: Per inserire codice html/php o caratteri speciali utilizza Postable oppure HTML Encoder per convertire i caratteri speciali del tuo commento.)

      1. bè… sono sicuro di aver sbagliato perchè altrimenti funzionerebbe 🙂
        ho aperto un nuovo progetto e chiamato prova.fla
        ho creato un testo dinamico e ho assovciato la variabile txt.
        poi ho pubblicato tutto anche l’html e ho modificato le scritte che hai detto. ti posto il contenuto
        dove sbaglio???

        ecco il codice

        <noscript>
        <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="prova" align="middle">
        <param name="allowScriptAccess" value="sameDomain" />
        <param name="allowFullScreen" value="false" />
        <param name="movie" value="prova.swf?txt=VARIABILE" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> <embed src="prova.swf?txt=VARIABILE" quality="high" bgcolor="#ffffff" width="550" height="400" name="prova" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
        </object>
        </noscript>

  1. RISOLTOOOOOO…. alla fine l’errore stava proprio nel codice HTML, ma non quello che ti ho postato bensì la parte superiore che non avevo neanche notato, la pagina generata automaticamente da flash mi creava un codice in javascript infinito praticamente inutile. l’ho cancellato interamente lasciando solo l’object e adesso mi funziona. grazie comunque per la tua cortesia

  2. è un bel codice lungo. te lo posto.

    <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's used in the movie-->
    <!--text used in the movie-->
    <!-- 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=6,0,0,0',
    		'width', '550',
    		'height', '400',
    		'src', 'prova',
    		'quality', 'high',
    		'pluginspage', 'http://www.adobe.com/go/getflashplayer',
    		'align', 'middle',
    		'play', 'true',
    		'loop', 'true',
    		'scale', 'showall',
    		'wmode', 'window',
    		'devicefont', 'false',
    		'id', 'prova',
    		'bgcolor', '#ffffff',
    		'name', 'prova',
    		'menu', 'true',
    		'allowFullScreen', 'false',
    		'allowScriptAccess','sameDomain',
    		'movie', 'prova',
    		'salign', ''
    		); //end AC code
    </script>
    1. A prima vista dipendeva dal fatto che il primo codice che hai postato qui è racchiuso fra i tag NOSCRIPT, che vuol dire che quel codice viene usato in mancanza di supporto javascript.
      Il secondo – lunghissimo – codice, sempre a prima vista, sembrano una serie di check per verificare le versioni di flash player e browser; poi c’è la funzione ‘AC_FL_RunContent’ che fa andare il filmato Swf.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Ricevi un avviso se ci sono nuovi commenti. Oppure iscriviti senza commentare.

You can add images to your comment by clicking here.