Trucos FLASH: Obtención de variables desde QueryString

13 ago. 2008
Cada día, en el transcurrir de una empresa dedicada al desarrollo web, ya sea incluso en un mes de agosto, surgen a menudo nuevas especificaciones o requerimientos que nos obligan a investigar soluciones que quizás antes jamás habíamos utilizado. Además esto ocurre frecuentemente cuando se trata de proyectos web que incorporan animaciones en flash, donde en ocasiones la integración e interacción de dicho archivo con nuestro gestor de contenidos requiere del ingenio, da la experiencia, pero sobre todo de la capacidad que actionscript nos ofrece.

Ayer mismo se nos planteó la necesidad de modificar el valor de una variable utilizada en un archivo flash en función del valor de un parámetro del QueryString de una URL. Algo que, tras un par de horas de analisis y de investigación, resulta realmente sencillo de realizar, pero que dicho así de buenas a primeras parece más complejo de lo que es. Aprovecharé además para explicar como de forma sencilla podemos cambiar ciertos aspectos de un mismo fichero flash, solamente mediante el paso directo de parámetros sobre la definición del object.

PASO DE PARÁMETROS DIRECTAMENTE SOBRE EL FLASH

En algunas ocasiones puede interesarnos, sin mayores complicaciones, que un mismo flash se comporte de forma diferente, cambie su color de fondo, o incluso que tenga una apariencia diferente, solamente con cambiar el valor de una de sus variables. Esto, que en apariencia resulta tan absurdo, puede ayudarnos a reutilizar un mismo fichero flash, en varias circunstancias diferentes. Sobre todo es muy útil para ajustar por ejemplo el look and feel de un mismo fichero flash al diseño de distintos portales web.

Ejemplo 1.1: Nuestro fichero flash sustenta su fondo en una fichero de imagen que nosotros podemos cambiar a nuestro antojo. Para ello mediante la simple asignación de una url relativa a la variable imageFileName podremos cambiar dicha imagen de fondo.

<object width="250" height="150" id="flaMovie"
codebase="http://macromedia.com/cabs/swflash.cab#version=4,0,0,0"
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
    <param name="movie" value="flaMovie.swf">
    <param name="imageFileName" value="imagen01.jpg">
    <embed src="flaMovie.swf" bgcolor="#99CC33" 
    type="application/x-shockwave-flash height="150" width="250">
</object>

Ejemplo 1.2: Con la misma intención que en el anterior ejemplo, esta vez la variable la definimos directamente sobre la propia url relativa de la película flash.

<object width="250" height="150" id="flaMovie"
codebase="http://macromedia.com/cabs/swflash.cab#version=4,0,0,0"
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
    <param name="movie" 
    value="flaMovie.swf?imageFilename=imagen01.jpg">

    <embed src="flaMovie.swf?imageFilename=imagen01.jpg" 
    bgcolor="#99CC33" type="application/x-shockwave-flash 
    height="150" width="250">
</object>

PASO DE PARÁMETROS POR QUERYSTRING

En nuestro caso en particular lo que necesitábamos es que este paso de variables se hiciera directamente desde el QueryString de una url. Además por cuestiones de optimización optamos porque de todas los posibles variables que puedan encontrarse en el QueryString, tan sólo queremos tener en cuenta la variable definida como tipo, algo que podremos también controlar mediante actionscript.

Ejemplo 2:

import flash.external.*; //para poder usar externalInterface

var paramTipo;
var queryString = ExternalInterface.call("window.location.search.substring", 1);

if(queryString) {
    var allParams:Array = queryString.split('&');

    for (var i = 0, index = -1; i < allParams.length; i++) {
        var keyValuePair:String = allParams[i];

        if((index = keyValuePair.indexOf("=")) > 0) {
            var paramKey:String = keyValuePair.substring(0,index);
            var paramValue:String = keyValuePair.substring(index+1);

            if (paramKey.toLowerCase() == "tipo") { paramTipo = paramValue; }
        }
    }
}

Ya solamente quedará utilizar adecuadamente en nuestro código actionscript la variable definida aquí como paramTipo para la finalidad que fuera necesaria. Con esto lo que logramos, como ya hemos comentado, es poder cambiar dinámicamente nuestra película flash en función de los valores que se han introducido en el QueryString, lo cual nos abre un abanico de posibilidades realmente amplio.

Nota: Este Script solamente funcionará en Internet Explorer si nuestro .swf integrado en el HTML como un Object emebedido tiene previamente definido un id.

Podréis encontrar más información ampliada en inglés en los siguientes enlaces.

Fuente 1 | Circlecube.com
Fuente 2 | Permadi.com
comments powered by Disqus
subir