Akela: HTML-Seite Ladeende ?

Hi,

wie kann ich feststellen, wann eine HTML-Seite fertig aufgebaut ist ?

Mein Problem. Ich will den Wert einer Überschrift per nodeValue auslesen. Das mache ich per JavaScript am Ende der Seite. Allerdings scheint die Überschrift zu diesem Zeitpunkt noch nicht zu bestehen, da ich einen Fehler "...has no properties" erhalte.
Durch einen weiteren manuellen Aufruf per Button funktioniert dann allerdings alles fehlerfrei.

ciao Andreas

  1. Hallo Akela,

    wie kann ich feststellen, wann eine HTML-Seite fertig aufgebaut ist ?

    Mein Problem. Ich will den Wert einer Überschrift per nodeValue auslesen. Das mache ich per JavaScript am Ende der Seite. Allerdings scheint die Überschrift zu diesem Zeitpunkt noch nicht zu bestehen, da ich einen Fehler "...has no properties" erhalte.

    [x] Du suchst den Event-Handler onload.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Huch,

      hatte um diese Zeit gar keine Antwort mehr erwartet :)

      Allerdings wird onLoad beim Laden der Seite aufgerufen. Ich benötige aber etwas, was bei Ladeende aufgerufen wird. Mit onLoad laufe ich sogar noch schneller in meinen beschriebenen Fehler.

      Trotzdem Danke.

      ciao Andreas

      1. Hallo,

        Allerdings wird onLoad beim Laden der Seite aufgerufen.

        Nein, nach dem erfolgreichen Laden.

        Ich benötige aber etwas, was bei Ladeende aufgerufen wird.

        Das tut das load-Ereignis.

        Mit onLoad laufe ich sogar noch schneller in meinen beschriebenen Fehler.

        Garantiert nicht.

        Mathias

  2. Hallo,

    wie kann ich feststellen, wann eine HTML-Seite fertig aufgebaut ist ?

    Wenn das Ereignis load ausgelöst wird, ist das Dokument fertig aufgebaut.

    Du kannst eine Funktion ausführen, wenn dieses Ereignis eintritt.

    function init () {  
       alert("Alles fertig!");  
    }  
    window.onload = init;
    

    Diese Funktion nennt man einen Event-Handler.

    Über einen Trick kann man auch mehrere Funktionen beim onload ausführen:
    http://simon.incutio.com/archive/2004/05/26/addLoadEvent

    Der load-Event hat ein Problem: Du willst Code ausführen, sobald der Zugriff auf den DOM-Knotenbaum mit deiner Überschrift möglich ist. load passiert aber erst, wenn auch externe Objekte wie Bilder, Multimedia-Objekte, IFrames und Stylesheets geladen sind.

    Eine Abhilfe schafft der Event DOMContentLoaded, den allerdings nicht alle Browser unterstützen. Mit ein paar Tricks machen auch die restlichen Browser mit, eine Fertiglösung:
    http://www.cherny.com/webdev/27/domloaded-updated-again

    Mathias

    1. Hi,

      sehr umfassende Erklärungen.

      Ich habe den Code window.onload = func(); probiert, doch habe ich das gleiche Ergenis.
      Meine benannte Überschrift steht in einem iframe innerhalb der HTML-Seite. Ich vermute somit, daß meine Seite den onload zwar richtig macht aber nicht den Aufbau des iframes berücksichtigt.
      Hast Du dazu eine Idee ?

      ciao Andreas

      1. Hallo,

        Ich habe den Code window.onload = func(); probiert, doch habe ich das gleiche Ergenis.

        Es muss
        window.onload = func;
        heißen, nicht
        window.onload = func();

        Schau dir den fehlerhaften Code mal genauer an. func ist eine Funktion, die Klammern () dahinter führen dazu, dass die Funktion aufgerufen wird in dem Moment, in dem diese Anweisung abgearbeitet wird. func soll aber erst onload aufgerufen werden.

        Bei window.onload = func; wird das Funktionsobjekt init in die Eigenschaft onload kopiert. So registriert man Event-Handler, indem man ein Funktionsobjekt in eine onevent-Objekteigenschaft kopiert (bzw. tatsächlich wird ein Verweis angelegt).

        Beim window.onload = func(); wird die Funktion sofort aufgerufen und deren Rückgabewert (höchstwahrscheinlich »undefined«) in window.onload gespeichert. Sprich, wenn das Ereignis eintritt, wird gar keine Funktion aufgerufen.

        Meine benannte Überschrift steht in einem iframe innerhalb der HTML-Seite. Ich vermute somit, daß meine Seite den onload zwar richtig macht aber nicht den Aufbau des iframes berücksichtigt.

        Doch, auch der IFrame sollte berücksichtigt werden,

        Mathias

  3. Hallo,

    ich habe das Problem gelöst. Das onload-event ist wohl das was ich benötige, allerdings innerhalb meiner iframes. Dort rufe ich im onload des body jetzt parent.func() auf und schon funktioniert die Geschichte.

    Danke für Eure Hinweise.

    Gute Nacht
    Andreas