Toon posts:

Hoe ontdekken wanneer DOM geladen is?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met de handen in het haar!

Ik gebruik een DHTML script om een tabel te bewerken. Deze script geeft echter fouten als IE of Firefox 'm nog niet helemaal heeft gerendered op het scherm. Stop ik het scriptje in een window.onload, dan werkt het uiteraard perfect, maar ik wil die event niet gebruiken.

Ik zoek dus naar een cross browser script die kan bepalen of mijn tabel is gerendered op het scherm of niet.... wie helpt?

Verwijderd

dan zou ik dat script na je tabel aanroepen:
code:
1
2
3
4
<table>
<!-- zut -->
</table>
<script type="text/javascript">modifyTable()</script>

Verwijderd

Topicstarter
Er is geen enkele garantie dat de tabel op het scherm staat als het scriptje na de </table> staat. Werkt misschien in veel gevallen, maar niet altijd.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-04 15:11

Bosmonster

*zucht*

Misschien staat ie nog niet altijd op het scherm (in gare browsers), maar hij is wel toegevoegd aan het DOM en dus manipuleerbaar.

[ Voor 12% gewijzigd door Bosmonster op 10-02-2006 11:20 ]


  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Ik weet dat je in Mozilla gebruik kunt maken van het DOMContentLoaded event (gewoon te gebruiken via addEventListener uiteraard).

Voor andere browsers zul je of toch gebruik moeten maken van het load event, of vanuit je script moeten controleren of een bepaalde node (je tabel) bestaat.

Dus heel simpel
JavaScript:
1
2
3
4
if (document.getElementsByTagName('table').length > 0
{
    // doe hier iets
})


En dan misschien een timeout indien het nog niet geladen is. Een andere mogelijkheid is gebruik te maken van het defer statement, waarbij je javascript pas wordt uitgevoerd als het document geladen is (maar ik weet niet of dat ook wacht op plaatjes e.d.).

Waarvoor heb je het eigenlijk nodig?

[ Voor 5% gewijzigd door cyberstalker op 10-02-2006 14:08 ]

Ik ontken het bestaan van IE.


  • André
  • Registratie: Maart 2002
  • Laatst online: 08-04 16:23

André

Analytics dude

Mjah waarom zo moelijk doen als de suggestie van Bosmonster ook werkt?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:13

crisp

Devver

Pixelated

defer wordt eigenlijk alleen door IE ondersteund en is hier eigenlijk ook niet voor bedoelt. Daarbij is de specificatie ook nogal vaag mbt dit attribuut, dus ook op basis daarvan kan je er niet echt op vertrouwen.
Dean Edwards heeft wel eens gespeeld hiermee.
Bosmonster schreef op vrijdag 10 februari 2006 @ 11:20:
Misschien staat ie nog niet altijd op het scherm (in gare browsers), maar hij is wel toegevoegd aan het DOM en dus manipuleerbaar.
Ik heb in specifieke situaties hiermee toch wel eens problemen gehad in Firefox, maar dat waren meestal complexe pagina's - ik heb dit vooralsnog niet kunnen reproduceren met een simpele testcase.

Ik heb goede ervaringen met DOMContentLoaded voor Firefox en onreadystatechange voor IE - echter laat je dan andere browsers weer in de kou staan...

Intentionally left blank


  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

crisp schreef op vrijdag 10 februari 2006 @ 14:17:
defer wordt eigenlijk alleen door IE ondersteund en is hier eigenlijk ook niet voor bedoelt.
Het is wel opgenomen in de W3C specificatie. Is IE dan de enige die zich hieraan houdt :D ?

http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.1

Ik ontken het bestaan van IE.


  • Justice
  • Registratie: Maart 2001
  • Laatst online: 07-08-2025
When set, this boolean attribute provides a hint to the user agent that the script is not going to generate any document content (e.g., no "document.write" in javascript) and thus, the user agent can continue parsing and rendering.
A hint dus, betekend dit dat het aan de User Agent is of die hier wat mee doet? De omschrijving is ook anders dan de uitleg in dit topic (en wellicht die van microsoft, heb ik niet gechecked).

Human Bobby


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:13

crisp

Devver

Pixelated

cyberstalker schreef op vrijdag 10 februari 2006 @ 14:33:
[...]

Het is wel opgenomen in de W3C specificatie. Is IE dan de enige die zich hieraan houdt :D ?

http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.1
When set, this boolean attribute provides a hint to the user agent that the script is not going to generate any document content (e.g., no "document.write" in javascript) and thus, the user agent can continue parsing and rendering.
'a hint', 'can' - het specificeerd niet echt een vast-omlijnde behavior, derhalve is het negeren van 'defer' ook gewoon volgens specificatie ;)

Justice: inderdaad; het wordt aan de userAgent overgelaten hoe hiermee om te gaan :)

[ Voor 8% gewijzigd door crisp op 10-02-2006 14:50 ]

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-04 15:11

Bosmonster

*zucht*

Probleem bij onload event is dat ie pas triggered als ook afbeeldingen e.d. geladen zijn. Wat ikzelf vaak doe als ik het wil doen als de body geladen is is:

code:
1
2
3
4
5
6
7
8
<html>
<body>
   [...]
</body>
<script type="text/javascript">
   // doe je ding
</script>
</html>


Maar dat zal wel weer niet aan allerlei standaarden voldoen :+

[ Voor 22% gewijzigd door Bosmonster op 10-02-2006 16:02 ]

Pagina: 1