Maik: onload-Funktion wird manchmal (!) nicht gefunden

Hallo,

bin dabei, eine Webseite zu entwickeln, die sich in einigen Teilen auf JavaScript/AJAX stützt. U.a. verwende ich die Bibliothek overlib für Hover-Fensterchen.

Funktioniert so weit auch, allerdings erscheinen dann, wenn Grafiken, an die Hover-Fensterchen geknüpft sind, mit der Maus überfahren werden, bevor die Seite vollständig geladen wurde, in der JavaScript-Konsole Fehlermeldungen wie "overlib is not defined". Das ist nicht sonderlich schön, aber auch nicht so schlimm, denn sobald die Seite dann mal fertig geladen wurde, funktionieren die Hover prima.

(Wenns trotzdem eine Möglichkeit gäbe, solche Fehler zu vermeiden, z.B., indem man dm Browser mitteilt, dass JavaScript-Code erst dann interpretiert werden soll, wenn alles geladen wurde, wärs allerdings nicht schlecht. ;) )

Weiterhin kommt es manchmal vor (Zusammenhang hab ich noch keinen genauen festgestellt), dass die onload-Funktion nicht gefunden wird, was allerdings DANN schon ärgerlich ist, weil damit in der Folge nicht geprüft wird, ob ein Seitenreload nötig ist. Dieser Fehler sollte von daher unbedingt verschwinden.

Aus irgendeinem Grund kommt es also dazu, dass die onload-Routine nicht zur Verfügung steht...

Fehlermeldung: x is not defined.

(wobei x = Name der Funktion)

Wie ist diese Meldung (javascript-technisch) zu erklären?
Was muss der Fall sein, dass eine onload-Routine, die ja sehr wohl ins Dokument eingebunden wird, u.U. als "not defined" übersehen wird?

(Gibt es eine Möglichkeit, dass JavaScript-Code erst dann interpretiert wird, wenn die Seite wirklich vollständig geladen wurde? Nach so was schaut es hier aus...)

Gruß Maik

  1. Hallo Maik,

    Funktioniert so weit auch, allerdings erscheinen dann, wenn Grafiken, an die Hover-Fensterchen geknüpft sind, mit der Maus überfahren werden, bevor die Seite vollständig geladen wurde, in der JavaScript-Konsole Fehlermeldungen wie "overlib is not defined".

    Wird das overlib-Script auch wirklich im Header geladen? Ich meine so:

      
    <html>  
    <head>  
      <title>Schnickschnack</title>  
      <script type="text/javascript" src="Schnickschnack.js"></script>  
      <script type="text/javascript" src="overlib.js"></script>  
    </head>  
    <body  onload="funktion_Aus_Schnickschnack('Schnick','Schnack','Schnuck')">  
      [...]  
    </body>  
    
    

    » Aus irgendeinem Grund kommt es also dazu, dass die onload-Routine nicht zur Verfügung steht...

    Fehlermeldung: x is not defined.

    (wobei x = Name der Funktion)

    Wie ist diese Meldung (javascript-technisch) zu erklären?
    Was muss der Fall sein, dass eine onload-Routine, die ja sehr wohl ins Dokument eingebunden wird, u.U. als "not defined" übersehen wird?

    "Übersehen" kann eine Funktion meines Wissens nicht werden. Entweder sie wurde zuvor geladen (z.B. im Header, siehe oben), oder eben nicht, dann ensteht allerdings so ein Fehler.

    Gruß, Don P

    1. Hallo Don P,

      "Übersehen" kann eine Funktion meines Wissens nicht werden. Entweder sie wurde zuvor geladen (z.B. im Header, siehe oben), oder eben nicht, dann ensteht allerdings so ein Fehler.

      Ist es hier von Bedeutung, dass die Funktionen im Header geladen werden?

      Ich binde mittlerweile zwar auch die overlib-Routinen im Header ein, aber dennoch bekomme ich immer noch diese Fehler "... not defined", wenn ich, BEVOR die Seite ganz geladen wurde, über irgendwelche Grafiken fahre, die diese Bibliothek ansprechen...

      Gruß Maik

      1. Hi Maik,

        Ist es hier von Bedeutung, dass die Funktionen im Header geladen werden?

        nicht unbedingt im Header (wenn auch üblicherweise), Hauptsache sie werden überhaupt geladen. Wie Don P auch schon schrieb ;-)

        Nun kenn ich zwar die Bibliothek nicht, aber wenn du beispielsweise vor dem Laden der Seite eine Funkion auszuführen versuchst, die vielleicht erst per onload (onload von was überhaupt?) initiiert wird, dann wird's wohl Fehler geben. Andersherum wird eine Funktion nicht funktionieren, die auf ein Element zugreifen soll, das evtl. noch gar nicht vorhanden ist. Gibt doch bestimmt Hinweise zur Einbindung der Bibliothek?

        Gruß
        Antipitch

        1. Hallo,

          Ist es hier von Bedeutung, dass die Funktionen im Header geladen werden?

          nicht unbedingt im Header (wenn auch üblicherweise), Hauptsache sie werden überhaupt geladen. Wie Don P auch schon schrieb ;-)

          Doch, man sollte overlib unbedingt im Header laden, steht auch so in der Doku von overlib. Denn während des Ladens der einzelnen Bilder kann man ja schon drüberfahren mit der Maus, also muss overlib bereits verfügbar sein, auch bevor die ganze Seite fertig geladen ist, sonst passiert eben folgendes:

          »»wenn Grafiken, an die Hover-Fensterchen geknüpft sind, mit der Maus überfahren werden, bevor die Seite vollständig geladen wurde, in der JavaScript-Konsole Fehlermeldungen wie "overlib is not defined".

          wenn du beispielsweise vor dem Laden der Seite eine Funkion auszuführen versuchst, die vielleicht erst per onload (onload von was überhaupt?) initiiert wird, dann wird's wohl Fehler geben.

          Eben.

          Gruß, Don P

      2. Moin Moin,

        Ich binde mittlerweile zwar auch die overlib-Routinen im Header ein, aber dennoch bekomme ich immer noch diese Fehler "... not defined", wenn ich, BEVOR die Seite ganz geladen wurde, über irgendwelche Grafiken fahre, die diese Bibliothek ansprechen...

        Sinnvoll ist es die Mouseevents überhaupt erst nach dem Onload an die
        Links zu binden, dann kann dieser Fehler nicht mehr auftreten.
        Angenommen das ist dein Html-Schnipsel mit den Links:

          
        <div id="linksmiteffekt">  
            <a href="link1.html">link1</a>  
            <a href="link2.html">link1</a>  
            <a href="link3.html">link1</a>  
            <a href="link4.html">link1</a>  
        </div>  
        
        

        Dann könntest Du z.B. mit diesem Script, an alle Links innerhalb des Divs
        einen oder mehrere Mouseevents dranhängen:

          
        <script type="text/javascript">  
        <!--  
        var init = function()  
        {  
         var links = document.getElementById('linksmiteffekt').getElementsByTagName('a');  
         for (i=0;i<links.length;i++)  
         {  
          links[i].onmouseover = function()  
          {  
           // tu irgendwas //  
           alert('ich bin ein Link nach: '+this.href);  
          };  
         }  
        }  
        window.onload = init;  
        -->  
        </script>  
        
        

        Bei // tu irgendwas // kommt dann ebend dein jetziges mouseevent rein :)

  2. Weiterhin kommt es manchmal vor (Zusammenhang hab ich noch keinen genauen festgestellt), dass die onload-Funktion nicht gefunden wird, ...

    Was soll das bedeuten? Du definierst eine Funktion, die nach dem laden ausgeführt wird und dann ist diese auf einmal verschwunden? Das kann nicht sein.

    Wie ist diese Meldung (javascript-technisch) zu erklären?

    So wie du es beschreibst eigentlich gar nicht.

    Was muss der Fall sein, dass eine onload-Routine, die ja sehr wohl ins Dokument eingebunden wird, u.U. als "not defined" übersehen wird?

    Das geht nicht, selbst wenn du diese überschreibst, kommt dann als Fehlermeldung: x is not a function

    D.h. du machst irgendetwas grundsätzliches falsch oder du sagst uns nicht was du konkret machst.

    (Gibt es eine Möglichkeit, dass JavaScript-Code erst dann interpretiert wird, wenn die Seite wirklich vollständig geladen wurde? Nach so was schaut es hier aus...)

    Nein.

    Struppi.