Avatar billede w13 Novice
11. august 2007 - 00:13 Der er 11 kommentarer og
1 løsning

window.onload virker kun sjældent i en ekstern js-fil IE

Hej Eksperter.

Jeg sidder og arbejder på en WYSIWYG-editor, som skal loade sin opbygning og nogle moduler dynamisk. Dette virker fint - til dels.

Mit problem er, at jeg benytter mig af en masse eksterne javascript-filer, så jeg slipper for en masse grim kode på selve siden. Når jeg i en fil (som er blevet inkluderet af en anden fil, der også er blevet inkluderet) bruger:

window.onload=function(){
  alert("Fisk!")
}

har jeg et problem i IE! Når jeg går ind på siden, vises Alerten slet ikke. Opdaterer jeg siden, sker der stadig intet. Når jeg så sætter cursoren i adresselinjen og trykker enter, bliver denne funktion kørt! (I min rigtige kode, køres ikke en alert, men en funktion, som sætter hele editoren op.... Derfor er denne fejl lidt skidt!)

Så jeg kan altså få editoren til at virke, ved bare at trykke enter i adresselinjen, og i øvrigt også, når jeg submitter en form på siden.

Derudover virker det altid fint, når jeg kører siden direkte fra min computer, og når jeg kører den i Firefox, _også_ på nettet.

Hvorfor reagerer den ikke på window.onload? Jeg har også prøvet med alt muligt attachEvent med samme resultat.
Jeg får ingen fejlmeddelelse, den kører bare ingenting. Ret skidt at sidde fast her, når jeg nu har arbejdet på den i flere uger.

Nogen som kan hjælpe mig med dette store problem?
På forhånd tak!
Avatar billede erikjacobsen Ekspert
11. august 2007 - 00:58 #1
Har du mere end een tilordning til window.onload, så den ene overskriver den anden, og det er lidt tidsafhængigt hvad der kommer først?
Avatar billede w13 Novice
11. august 2007 - 01:05 #2
Nope. Denne sætter alt i gang!

Jeg sidder lige nu og leger med noget onreadystatechange, ved du om det er smart? :)
Avatar billede erikjacobsen Ekspert
11. august 2007 - 01:08 #3
Næh, window.onload virker ellers altid. Dvs. jeg bruger ikke IE, men andre har ikke problemer med det jeg laver - ikke af den grund  i hvert fald... ;)  Så det er nok en anden fejl...
Avatar billede olebole Juniormester
11. august 2007 - 01:10 #4
<ole>

var nModules = 5;
function moduleLoaded() {
    nModules--;
    if (nModules==0) onAllLoaded();
}

I slutningen af hvert af de 5 moduler kalder du 'moduleLoaded'. I funktionen 'onAllLoaded' kalder du, som var det window.onload

/mvh
</bole>
Avatar billede olebole Juniormester
11. august 2007 - 01:13 #5
Hvis man indskriver scripts med DOM, loades de ikke nødvendigvis før vinduets onload-event
Avatar billede w13 Novice
11. august 2007 - 01:22 #6
Jeg er bange for, det ikke holder i mit tilfælde, Ole. Jeg gør allerede med modulerne som du siger, dvs. den del med at kalde moduleLoaded.

Jeg inkluderer alle filer i head-sektionen af koden. I en af disse filer ligger så denne funktion, som skal køres, lige så snart, body er loadet færdig.
Denne funktion sætter skub i opsættelsen af editoren. Dvs. den indsætter en tabel, som indeholder et iframe. Derefter indsættes alle moduler over iframen som klikbare ikoner. Og jeg kan jo ikke indsætte modulerne, før jeg har et sted, de kan være.

Så derfor skulle min funktion gerne aktiveres ved window.onload - hvilket også virker halvdelen af gangene, og det virker altid, hvis man skriver den direkte ude i hovedfilen uden at inkludere fra en js-fil.

Men hvorfor den ikke vil køres de fleste gange inde fra den eksterne fil, er for mig en stor gåde.
Avatar billede kongknabe Nybegynder
11. august 2007 - 15:15 #7
Olebole skrev "Hvis man indskriver scripts med DOM, loades de ikke nødvendigvis før vinduets onload-event"

Er det ok at indskrive scripts med DOM på følgende måde? (Her bruger jeg så funktionen "scriptLoaded" i stedet for "window.onload")

var headID = document.getElementsByTagName("head")[0];       
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'main_script.php';
headID.appendChild(newScript);
newScript.onreadystatechange = function() { if(newScript.readyState == 'loaded') { scriptLoaded(); } }
newScript.onload=scriptLoaded;
Avatar billede w13 Novice
11. august 2007 - 19:00 #8
Fungerer readyState i Firefox? Jeg forsøgte på et tidspunkt, men den lod ikke til at forstår onreadystatechange heller.
Avatar billede w13 Novice
11. august 2007 - 19:00 #9
Og det var også kun hver anden gang, den virkede i IE.
Avatar billede w13 Novice
11. august 2007 - 19:00 #10
Nå ja, det bruges jo også i Ajax.. hmm
Avatar billede kongknabe Nybegynder
11. august 2007 - 19:19 #11
Er usikker på hvorfor vi tilføjede begge linjer, altså både onreadystate og onload - men mener det var pga. problemer på tværs af browsere :-)
Avatar billede w13 Novice
11. august 2007 - 19:32 #12
Hmmm. Jeg har flyttet en del af koden ud i den først inkluderede fil og alt virker bare nu med window.onload. Ellers tak! :)

Jeg lukker her så!
Note to self: brug ikke window.onload i en fil, der er inkluderet i en fil, der er inkluderet i en fil. =)
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