Comunidad de diseño web y desarrollo en internet online

Resolver problemas de rutas relativas o absolutas de los SWF

Muchas veces nos ha pasado de tener problema con las carpetas/rutas de los archivos, voy a explicarlo con el ejemplo.

Nuestro diseñador hace un bonito swf que llama a xml/mp3/flv que están dentro de una carpeta que se llama /cosas, por lo que gráficamente quedaría algo como esto:

El swf estaría aquí:



y en la carpeta cosas tendria algo como esto:


Cuando ejecutamos ese swf se ejecuta sin ningún problema. El diseñador nos pasa los archivos para los metamos en el sitio que ya estamos trabajando. Como ya estamos trabajando tenemos una estructura de trabajo y organización, con lo que tal vez quede algo así:



Lo mas común, es que pagina.html utilice el archivo flash.swf y aquí es cuando queremos matar gatitos.

¡EL FLASH NO FUNCIONA!



Pero si lo ejecutamos y anda ¿Por qué no anda cuando lo queremos usar? La mayoría de las veces, es la ruta de los archivos que levantamos.

Con el siguiente código podremos de manera muy fácil y elegante este problema:

Código :

function url():String
 {
   var url_array:Array = _root._url.split('/');
   String(url_array.pop());
   return url_array.join('/') + '/';
}
_root._global.myUrl = url();

La función en cuestión básicamente lo que hace es devolver el path del archivo swf, y es mas, le daremos el valor de la función a una variable global.

Con _global utilizamos variables globales, en este caso llamada myUrl, le daremos el valor que retorne nuestra función.
Nuestra función lo que hace es crear un array de la ruta completa pero separa por los / por lo que nuestro swf esta en www.dominio.com/carpeta/algo.swf el array tendrá los siguientes valores:

Con .pop() lo que hacemos es eliminar el ultimo elemento de ese array, y en la tercera línea se devuelve el resultado de unir ese array con el carácter / y le concatenamos / con lo que nos devolvería www.dominio.com/carpeta/
Ahora cada vez que tengamos cosas como:

Código :

myXML.load('miarchivo.xml');

Lo reemplazaremos por

Código :

myXML.load(_root._global.myUrl + 'miarchivo.xml');

Y con eso, no importa donde se ejecute el swf, siempre llamara bien a todos los archivos.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate