Avatar billede jytte Nybegynder
16. april 2010 - 09:38 Der er 4 kommentarer og
1 løsning

kan onload udføres før javascript include er hentet?

Jeg har en side som på onload kalder en funktion som kalder en funktion som ligger i en javascript-include-fil.
<head>
<script type="text/javascript" src="minIncludefil.js"></script>
<script type="text/javascript">
function doSomething(){
    funcFraIncludefil();
}
</script>
</head>
<body onload="doSomething();">

Jeg har nu fået nogen meldinger om at første gang siden kaldes bliver funktionen i javascript-include-filen (funcFraIncludefil();) ikke udført, men hvis de derefter klikker på F5 så udføres den.

Det for mig til at tro at include-filen måske ikke er hentet hjem på det tidpunkt hvor funktion i includefilen kaldes (det er et site med relativ stor belastning).

Er der nogen der ved om dette er muligt - og hvis det er muligt hvad man kan gøre ved det udover at bede brugerne prøve F5?
Avatar billede esben85 Nybegynder
16. april 2010 - 09:58 #1
du kan jo prøve at sætte en onload på dit javascript include, eks:

<script type="text/javascript">
var mitIncludescript = document.createElement("script");
    mitIncludescript .src = "minIncludefil.js";
document.getElementsByTagName("head")[0].appendChild(mitIncludescript);
    mitIncludescript.onload = function(){ /*Do something*/};
</script>
Avatar billede shl_net Nybegynder
16. april 2010 - 15:45 #2
Er ikke helt sikke på hvad problemet er men, det er altid en god praksis at arbejde med
unobtrusive JavaScript. Når du har brug for at, en eller flere funktioner udføres ved et onload
script kan det anbefales at bruge nedenstående funktion, som så kan ligge i en ekstern JavaScript fil. Sagen er at et onload script, som udgangspunkt kun kan bruges en gang, og vi er derfor nød til at bruge nedenstående script, hvis vi har flere funktioner som skal udføre på lige efter hinanden

// JavaScript Document
// Written by Simon Willison (http://simon.incutio.com/)
function addLoadEvent(func){
    var oldonload    =    window.onload;
    if(typeof window.onload != 'function'){
        window.onload    = func;
    } else {
        window.onload    = function(){
            oldonload();
            func();
        }
    }
}
function doSomthing(){
    alert("function 1");
}
function doSomthingElse(){
  alert("function 2");
}

addLoadEvent(doSomthing);
addLoadEvent(doSomthingElse);
Avatar billede Slettet bruger
16. april 2010 - 16:27 #3
onload køres først når ALT er hentet - med garanti.

Mon ikke snarere at det de oplever er, at siden ser færdig ud, men faktisk stadig mangler et enkelt billede eller noget ?
- bannerreklamer kan f.eks. nogle gange være længe om at blive leveret...

Men hvis din JS-include ligger i <head> så ER denne også garanteret hentet og klar, når siden begynder at displaye.

Så alternativt til at køre funktionen i onload, kunne du køre den "manuelt" sidst på siden:

.
..
...
<script> funcFraIncludefil() </script></body></html>
Avatar billede olebole Juniormester
18. april 2010 - 19:58 #4
<ole>

shl_net >> Det er mange år siden, den kode var god kodeskik. I dag bruger man addEventListener og attachEvent - afhængig af, hvad browseren understøtter. Derudover kan man evt. - af hensyn til forældede browsere og webkodere - tilføje dit script. Det er faktisk mere end 10 år siden, de to store browsere begyndte at understøtte dette - og resten fulgte lige i hælene  ;o)

jytte >> Din fil er hentet, når browseren fyrer sin event på onload af, men det er ikke sikkert, at evt. nødvendige funktioner i filen er kørt. Det kan derfor syne, som om filen ikke er hentet

/mvh
</bole>
Avatar billede jytte Nybegynder
07. april 2012 - 12:39 #5
tak
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester