29. november 2011 - 12:07Der er
26 kommentarer og 1 løsning
Dynamisk loading af js
Hej Eksperter
Jeg loader js via denne function
function loadjscssfile(filename, filetype){ if (filetype=="js"){ //if filename is a external JavaScript file var fileref=document.createElement('script') fileref.setAttribute("type","text/javascript") fileref.setAttribute("src", filename) } else if (filetype=="css"){ //if filename is an external CSS file var fileref=document.createElement("link") fileref.setAttribute("rel", "stylesheet") fileref.setAttribute("type", "text/css") fileref.setAttribute("href", filename) } if (typeof fileref!="undefined") document.getElementsByTagName("head")[0].appendChild(fileref) }
Det virker fint i de fleste browsere, men af en eller anden grund får jeg en fejl i firefox 5, hvor den siger det ikke er loadet. Hvis jeg inspecter koden står ref i head som den skal. Nogen forslag
Jeg bliver bims. Hvis jeg bare sætter scripts ind i min kode <-- den som bliver kaldt x antal gange så virker det. Problemet er at den kode bliver kaldt x antal gange så scriptene bliver indlæst mere end en gang. Det var det jeg ville undgå.
Ja, enten må du undlade at loade dem dynamisk, hvilket nok er et spørgsmål om en anden struktur - eller også må du spørge på, om funktionen/metoden er eksisterende, og evt. time dig ud af problemer med sen load (= masser af bøvl). I min verden skal der en ret stærk begrundelse til for at loade dem dynamisk =)
Undlad i øvrigt kendte tagNames og metodenavne til ID'er - f.eks. "iframe". Det kan ofte resultere i problemer
Jeg kan ikke se, der sker noget fra eller til ved at køre en funktion isLoaded (#15). Hvad gør den, hvis scriptet er (eller ikke er) loaded?
Har du nogen fordele ud af at loade disse scripts dynamisk? Hvad fylder de - og bruger du dem på andre sider, så brugeren allerede har dem i sin cache?
Det er meningen at den skal loade scriptet hvis det ikke allerede er loaded. Scriptene fylder 300 kb inkl JQuery 1.7. Mit problem er lidt at der bliver brugt en tidligere version af JQuery andre steder. Hvad sker der hvis man først har loaded 1.7 også senere loader 1.3.2?
Det lyder meget voldsomt. jQuery 1.7 fylder knap 92KB i den minimerede version (som du naturligvis bruger), så resten må være overordentlig omfangsrigt!
Så vidt jeg ved, er jQuery bagudkompatibelt, så der burde ikke være noget i vejen for at bruge version 1.7 over det hele.
På mobile enheder bør du dog helt klart overveje, om brugeren har ligeså stor glæde af animationer og overblændinger, som du har haft med at lave dem. Skal en mobil hente flere hundrede kilo JS, kan det tage minutter, før siden kan bruges. I den situation bliver (ligegyldig) funkyness en uudholdelig pine i nakken *o)
Jeg havde brugt den ikke minimerede version men har nu skiftet. Jeg er i øvrigt gået bort fra at loade JQuery dynamisk. Nu har jeg selvfølgelig fået et nyt problem *SUK*
Nøøøhhh, men strengt taget kan man jo slet ikke bruge fancybox, da den kræver, man sætter en invalid rel attribut. På den anden side er det tydeligvis politisk ukorrekt at beklage sig over jQuery's utallige uhensigtsmæssigheder, så det har jeg efterhånden opgivet. Idéen om at overtale lemminger til at undlade at springe er dødfødt *o)
Derudover er brugen af rel attributten et tegn på et elendigt designpattern i en applikation (jQuery). Der sker nemlig det, at jQuery (eller rettere, den anvendte extension) på sideload traverserer alle sidens elementer, til den har fundet alle elementer med en bestemt rel attribut. Derefter kan jQuery gøre noget ved de pågældende elementer.
Dengang, da webudviklere gad at lære at skrive JavaScript, havde man en væsentligt bedre performende tilgang. Da pegede man - på sideload - selv de elementer, som skulle behandles, præcist ud.
Det gider man åbenbart ikke længere, så derfor ses ofte adskillige forskellige jQuery extensions på hver side - som hver især traverserer samtlige sidens elementer igennem.
JavaScript udvikling er i høj grad blevet overladt til mere eller mindre tilfældige udviklere, som skriver 'black-boxes', der (på overfladen) kan bruges af hvem somhelst. Det ses tydeligt på det faktum, at antallet af JS-fejl nærmest nærmest er eksploderet gennem de seneste 3-4 år. Det er idag umuligt at surfe med fejlmeddelelser slået til i IE - og laaaangt den overvejende del af fejlene stammer fra jQuery og andre black-boxes. Det er i mine øjne en kedelig udvikling.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.