electroduendes.com

bitácora de un desarrollador interactivo

electroduendes.com header image 2

como evitar el proxy de telefonica en Flash

January 10th, 2006 · 3 Comments

Es muy difícil explicar a un cliente que el cambio que has realizado en su página no es visible debido al proxy, e incluso hay veces que telefónicamente he tenido que borrarle la carpeta de temporales… “pulsa en herramientas>opciones de internet..>eliminar archivos… no, no, en inicio no, en el explorador, no, en el google no…”
Supongo que a todos os suena. Bien, pues hace un año mas o menos me pasó algo insólito; el proxy servía los swfs corruptos, y la página no se veía. Así que me apresuré a averiguar como demonios podía saltármelo, y encontré una idea que podía servir, adjuntar una variable aleatoria a la cadena de la URL a cargar, de tal manera que que el archivo pareciera diferente a ojos del proxy. Vale, nada nuevo, supongo que todos hemos llegado hasta ahí.

El problema de esta opción es que es bastante tedioso andar concatenando.. cada vez que tienes que hacer un loadMovie, un loadVars, un loadSound, un load… tienes que andar acordándote de ponerlo, y peor aún, acordarte de cambiarlo cuando se sube a producción.

var v:Date = new Date();
// comentar al subir a produccion 
mcl.loadMovie("principal.swf");
//mcl.loadMovie("principal.swf?antiproxy="+v.getTime());
// TODO: esto es un infierno!, hay que automatizarlo!.

Todo debido a que el player standalone no consigue cargar las cadenas del tipo “miarchivo.swf?antiproxy=90878676″.
Hasta que un día como hoy tuve un rato para pensar en algo que pudiera funcionar.

Es un simple prototipo que sobreescribe el método loadMovie de la clase MovieClip. El prototipo usa solamente el “anticaché” (loadMovie(”archivo.swf?anticache=”+v) ) cuando el swf está en producción. De esta manera, podemos subir nuestros archivos directamente a producción sin tener que acordarnos de comentar y descomentar código.

MovieClip.prototype._loadMovie = MovieClip.prototype.loadMovie;
MovieClip.prototype.loadMovie = function(url:String,method:String):Void {
	var con:LocalConnection = new LocalConnection();
	if(con.domain()=="localhost"){
		this._loadMovie(url, method); // si estamos en local todo igual...
	} else { // en caso contrario, que reviente el proxy
		v = new Date();
		//fix alex_wolff: si la query viene con mas variables, no nos la cargamos
		var separador:String = (url.indexOf("?")>-1) ? "&" : "?"; 
		this._loadMovie(url+separador+"antiproxy="+v, method);
	}
	con.close();
}
var p = _root.createEmptyMovieClip("contenedor", 1);
p.loadMovie("jaja.jpg");

Tags: Actionscript 2.0 · Flash · Librerías, recursos

3 responses so far ↓

  • 1 ElPeter // Mar 2, 2006 at 8:58 am

    Vale, está genial, te saltas los proxy’s, pero acuerdate que si existen los proxys es por algo… la cantidad de ancho de banda que te puede ahorrar unos cuantos proxys bien puestos ;-)

    Bueno, como siempre, alguno de sistemas tenía que aparecer tocando los g?¼ebs

  • 2 Alex // Mar 9, 2006 at 2:37 am

    mmm… y si estamos pasando algún parámetro? Lo digo porque la función se puede mejorar un poquillo con un:

    separador = (url.indexOf(”?”)>-1)? “&”:”?”;

    y luego ya el:

    this._loadMovie(url+separador+”antiproxy=”+v… etc.

  • 3 Alex Sánchez // Mar 9, 2006 at 11:44 am

    cierto, cierto, buen apunte, :D
    voy a actualizar el prototipo.
    Saludos!

Leave a Comment