På mit arbejde laver jeg ofte indhold som skal implemteres i et cms (dynamicWeb), hvor alle ens filer ligger langt nede i en fil struktur og så bliver embedded på ud de sider hvor de skal bruges. Det er der ikke noget galt med, men når man embedder en flash fil i på en side fx. www.site.dk/?id=333, så går det fint når det bare er flash filen. Men hvis man vil havde noget dynamisk/externt indhold ind fx. flv, xml eller billeder, så løber man ind i det problem at flash filen kender umilbart kun det scope den er loadet ind i, så man skal fortælle hvor alle de filer ligger, som ellers lå relativt til flash filen.
jeg har prøvet med flere metoder gennem tiden.
- hardcode prefix sti direkte ind i flash filen.
- flashvars som giver prefix sti
- flashvars til xml, som fortæller hvor alle filerne er.
- ect..
Nummer 1 er ikke en specielt fleksibel løsning, men den virker. og det gør de andre sådan set også.
Men jeg synes at alle løsningerne er meget kluntet hvis man bare vil loade en film ind, eller et billede.
Men så fandt jeg
trace(root.loaderInfo.url);
og der kan man få en sti til hvor filen bliver loadet fra, så nu kan man automatisk finde ud af hvor flash filen ligge, og der igennem altid fange de filer der ligger relativt til swfen.
//oldschool måde at finde ting og fjerne dem
var swfURL:String = root.loaderInfo.url;
var path:String = swfURL.split("swfname.swf").join("");
trace("path:", path);
Det eksempel stadig har det problem at man skal skrive hvad ens swf hedder, og hvis man ændre navnet så virker det ikke.
Men det kan løses med regexp
var reg:RegExp = /\/\b[a-z0-9._%+-]+.swf/gi;
var swfURL:String = root.loaderInfo.url;
var path:String = swfURL.replace(reg, "/");
Nu har man et script der altid giver en sti relativ til swf'en, lige hvad den bliver omdøbt til eller hvor den bliver flyttet hen.