Når du loader en fil (html, swf, txt, xml, php, asp, o.s.v.), vil den som standard blive cached af din browser. Det betyder at næste gang browseren bliver bedt om at hente den samme fil, vil den blive hentet fra cachen istedet for fra serveren.

Det er muligt at ændre din egen browsers caching indstillinger, men du har ingen kontrol over hvordan brugeren har indstillet sin browser.

Løsningen på dette problem er at loade dine filer med en unik nøgle. F.eks:
holder_mc.loadMovie("eks.swf?nocache=1118251655640");

Browseren vil opfatte eks.swf og eks.swf?nocache=1118251655640 som to forskellige filer og den nyeste version af filen vil derfor blive loaded.

En måde at generere en unik nøgle på er, at benytte Flash's Date objekt:

1
2
3
4
5
var dato:Date = new Date();
 
//getTime() retunerer antal milisekunder siden midnat d. 1. januar 1970.
var tid:Number = dato.getTime();
holder_mc.loadMovie("eks.swf?nocache="+tid);

Den ovenstående kode kan vi sammenskrive til:
holder_mc.loadMovie("eks.swf?nocache="+new Date().getTime());

Nu har vi en løsning på cache problemet, men desværre skaber denne løsning et nyt problem.
Hvis du prøver at benytte vores anti cache løsning inde i Flash IDE'et, vil du få denne fejlmeddelse:

Flash fejlmeddelse

Flash kan ikke finde filen

Flash kan altså ikke finde filen, derfor bliver vi nødt til at udvide anti cache løsningen til at checke om swf'en er loaded i en browser eller ej:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function antiCache() {
  // check Flash Player typen (StandAlone, External, PlugIn eller ActiveX)
  var pt:String = System.capabilities.playerType;
 
  // hvis typen er PlugIn (Mozilla, Opera, Safari, osv) eller typen er ActiveX (IE)
  if (pt == "PlugIn" || pt == "ActiveX") {
    // generer en unik nøgle
    return "?nocache="+new Date().getTime();
  }
  else {
    // ellers gør ingenting
    return "";
  }
}
holder_mc.loadMovie("eks.swf"+antiCache());

På den måde vil eks.swf kun få tilføjet en unik nøgle, hvis flashfilen er loaded i en browser.
I "Anti cache - del 2" ser jeg se nærmere på hvordan man undgår, at en swf-fil der er embedded i et html-dokument bliver cachet.