[html+js] clientWidth geeft foute waardes

Pagina: 1
Acties:

  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
hallo,

momenteel word ik even helemaal stapelgek om een bug in mijn js code of in IE 5.5 windows. laten we IE vooralsnog het voordeel vd twijfel geven. het probleem:

ik heb een frameset met daarin een aantal frames. van een van die frames wil ik de document.body.clientWidth uitlezen. dit doe ik in de functie init() bij <body onload='init()'>.

welnu, dit werkt prima op het moment dat de hele frameset met frames al eens is ingeladen, oftewel als ik een refresh doe (RMB > Refresh) van alleen het frame in kwestie . Dan krijg ik netjes het aantal pixels terug. Maar zodra ik de complete frameset opnieuw inlaadt gaat het mis. Ik krijg dan geen 800 maar 98 terug.

ik heb de volgende dingen al geprobeerd, tevergeefs:

- wacht net zo lang tot de frameset is geladen
- alle javascript js include-files (die tussen <head> tags staan) check of ze geladen zijn

ik kan dit netjes afvangen maar dan nog krijg ik een bodywidth van 98 terug.

wat ik nu heb gemerkt is het volgende:

als ik er <body onload="setTimeout('init()', 1000)"> van maak, dan krijg ik wel de juiste breedte terug. stel ik zet de timeout op 500, dan krijg ik weer 98 terug! het lijkt er dus op dat de body toch nog niet geladen is, of dat deze nog niet gerenderd is oid. Maar om dit met een lelijke timeout op te lossen is van de zotte |:( !

iemand suggesties??

  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

Misschien wachten totdat alle frames ook klaar zijn met laden? Of bedoelde je dat met "wacht net zo lang tot de frameset is geladen".

En de oplossing met die timeout kan sowieso niet, want de tijd die je daar in moet zetten kan op elk systeem weer anders zijn.

Heb je een url, kunnen wij ook even testen.

  • DaRace
  • Registratie: Juni 2001
  • Laatst online: 03-10-2023
volgens mij moet je in je init() alle frames gaan aflopen en bijvoorbeeld checken of het body element bestaat, net zo lang totdat ze allemaal bestaan: dan is alles geladen en kun je de breedte uitlezen

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

misschien gekke vraag hoor, maar heb je die init() in de body onload van de frameset staan? of van het frame zelf? Hier zit namelijk noal wat verschil in. theoretisch gezien zou die van de frameset moeten w88 totdat alles netjes op het scherm staat :)

Stop uploading passwords to Github!


  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
andre, ik werk lokaal met php en mysql spul dus kan niet ff 123 uploaden. ik zal eens kijken of ik het toch online kan zetten...

darace, heb ik gedaan: ik loop door frameset object heen en check per frame of de document.body bestaat. zodra er eentje niet bestaat, roep ik de functie opnieuw aan over 500 ms en breek de verdere functie af. pas als alle docbodies bestaan ga ik verder met init(). maar ik krijg nog steeds de verkeerde body

papa eend, ik roep de init() functie idd aan vanuit de frame zelf en niet vanuit frameset. maar aangezien de frame zichzelf weleens herlaadt en deze init() bij iedere reload van dit frame aangeroepen moet worden moet ik hem ook hier aanroepen. overigens check ik in m'n init() of de frameset ook geladen is (<frameset onload='frameset_loaded = true'> en die dan checken in m'n init().)




heu! ik heb voor de gein de clientWidths van alle frame geprint, en - behalve van frames met width * - staan ze allemaal op 100! (ik zei eerst 98 omdat ik een 1-pixel-border om m'n body had zitten). heel vaag dit.

sterker nog, ik roep deze for-lus nu vanuit m'n frameset pagina aan na een onload... allemaal 100 breed! terwijl ze toch 800 breed zijn!

[ Voor 23% gewijzigd door js303 op 07-08-2003 15:58 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

js303 schreef op 07 augustus 2003 @ 15:49:
sterker nog, ik roep deze for-lus nu vanuit m'n frameset pagina aan na een onload... allemaal 100 breed! terwijl ze toch 800 breed zijn!
Je moet de onload niet in de frameset zetten maar de in betreffende pagina. De frameset kan al lang geladen zijn terwijl de pagina's nog bezig zijn.

  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
OK ik ben eruit en ik moet mij diep schamen. de frameset wordt namelijk zelf in een window geopend, en daar wordt een resizeTo() op toegepast (vanuit een de window.opener pagina! is overigens niet mijn code dus misschien kom ik met dit smoesje nog een beetje weg!). Gelukkig maar dat ik IE nog niet de schuld had gegeven anders hadden jullie mij terplekke tot de grond toe afgeflamed (en gelijk geef ik jullie).

  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
Je moet de onload niet in de frameset zetten maar de in betreffende pagina. De frameset kan al lang geladen zijn terwijl de pagina's nog bezig zijn.
ja dat had ik in eerste instantie al gedaan hoor, maar probeerde dit ook nog eventjes. volgens mij is het echter wel zo dat een frameset.onload pas waar is als de bodies vd frames erbinnen ook geladen zijn.

  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

Zo'n flamewar kan alsnog beginnen >:)

  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
ok, dan doe ik gewoon control+w :D
Pagina: 1