No caché de web en Flash
10 seguidores
Hola tengo una web en Flash que mensualmente actulizo, y en el navegador web de mi cliente, no actualiza; tiene que estar vaciando cache para poder ver los cambios. He oido que es posible hacer que no se cachee la web por una sentencia html que se pone en el index.html. Sabeis algo de esto?
Captus
Hola,
He encontrado una meta que puede resolver tu problema:
META HTTP-EQUIV="Pragma" CONTENT="no-cache"
Habría que meterla en el HEAD y con sus
La cosa que no sé si funciona, no lo he probado, ya me lo dirás.
bamer
Probaré lo que me cuentas Captus, y ya te cuento.
x8
Otra opción es que si puedes usar php cambies la ruta del swf añadiendole un ?miVariable==numeroAleatorio?>
Así cada vez que accedas a la web la ruta será distinta, y por tanto nunca tirará de caché...
El único problema es que siempre te tendrás que tragar el preload :-)
guscreations
Algo que mejora lo que te propone X8, es que ese número aleatorio no lo sea tanto.
Me explico, lo de concatenarle algo es para que el navegador crea que es un fichero distinto, pero realmente el fichero sólo es distinto cuando cambia, así que lo mejor es cambiar ese número cuando cambia el fichero.
Esto lo puedes conseguir con php, leyendo la fecha de modificación del fichero swf y concatenádole este dato:
Con esto solucionarías el problema con el swf principal, pero si ése swf carga más swfs internamente te volvería a pasar.
En ese caso, deberías pasarle por flashvars al swf principal, las fechas de cada uno de los swf que va a cargar, y usarlas a la hora de cargarlos, de la misma manera.
Si son muchos ficheros y temes que tarde mucho el index.php en leer todas sus fechas, puedes usar un array php con el número de versión de cada uno de los swfs, y cada vez que subas uno nuevo, cambiar el número de versión en el array. Pero esto te llevará trabajo extra de mantenimiento.
Espero que te sirva
ozke
Sobretodo dejad de utilizar el pragma no-cache (propuesto por cactus y practica habitual desde que aparecio el proxy cache en España) ya que empieza a estar "deprecated"/descartado/anticuado/loquesea.
bamer
La verdad que hasta ahora no había probado nada; iba a probar lo de captus, pero si me decís que no, entonces ya no se que probar, porque la solución php de la que me hablais no se como llevarla a cabao.
guscreations
Una solución más casera es cambiar el nombre del flash cada vez que hagas un cambio.
Por ejemplo: index_16_10_2008.swf
sergi0ara
Si es solo un archivo es una opción, pero como en el index.swf tengas un menú con 10 botones, que cargan distintos swf´s externos mediante condiciones, aparte de cambiar los nombres de esos 10 swf´s externos, si tienes 5 condiciones por botón que hacen referencia a cada swf externo tendrías que cambiar 50 veces TODOS los nombres a los que haces referencia desde los Mc en AS.
x8
Eih Gus! tu idea me ha gustado mucho, es fácil de hacer y 100% eficaz...
guscreations
Lo de la solución casera es una chapu, está claro, para mi lo ideal es lo del php que comenté antes, pero si eso no se puede, algo hay que intentar.
Además de cambiar el nombre del swf, se podría pasar una variable por flashvars con la fecha, y propagar esa fecha hacia todos los swf cargados, no es tan optimo, pero serviría.
El caso es quedarse con la idea de que al cambiar los nombres, el navegador no lo cachea.
Después hay que ingeniárselas, ya sea con php, as o html.
psycho
Yo siempre me creo una clase estática "Util.as", donde meto funciones varias como por ejemplo para evitar la cache:
//------
public static function nocache():String {
var fecha:Date = new Date();
var anyo:Number = fecha.getYear();
var mes:Number = fecha.getMonth();
var dia:Number = fecha.getUTCDate();
var hora:Number = fecha.getHours();
var min:Number = fecha.getMinutes();
var sec:Number = fecha.getSeconds();
var todo:Array = new Array(anyo, mes, hora, dia, min, sec);
var res:String = todo.join("");
return (res);
}
Y luego la llamas así:
var url = "mi_archivo_externo.swf?nocache="+Util.nocache();
gelinos
alguna solucion tengo un archivo en flash y (xml) que muestra dos fotos que se actualizan cada 10 minutos. cual es mi sorpresa que no me actualiza las fotos hasta que pase un tiempo. ¿alguien sabe que tengo que hacer?
bamer
psycho, supongo que la llamada a la clase lo harás desde el index.swf o home.swf no?? o si no desde donde?
psycho
Hombre, la idea es que importes la clase allá donde la necesites, dentro de otra clase o en _root:
//////////////////////////////////////////////////////////////////////////////
import com.psycho.proyecto.Util;
//////////////////////////////////////////////////////////////////////////////
//
var url = "mi_archivo_externo.swf?nocache="+Util.nocache();
//
fernandocomet
Yo haría como dice Gus:
En "pelicula.swf" llamo a "pelicula2.swf":
vacio_mc.loadMovie("pelicula2.swf?nocache=" + new Date().getTime());
stop();
//vacio_mc es un clip vacio en el escenario
Writer_Head
Yo también me he encontrado con ese problema, la solución de la etiqueta META no me funcionó del todo, a veces los subclips .swf los cargaba de la caché. La próxima vez intentaré alguna de las soluciones que habeis expuesto.
Lo cierto es que es bastante frustrante para los que no somos expertos en programación encontrarnos con estas dificultades para conseguir cosas en principio tan básicas. ¿No creeis que Adobe debería implementar algo que facilite ese proceso de actualización de webs en flash?.