ChrisP.: Javascript-Funktion beim Laden der Datei ausführen

Hallo an alle,
möglicherweise eine Anfängerfrage, aber es ist lange her, dass ich mich mit Skripten befasst habe... Kann man eine extern gespeicherte Funktion während des Ladens einer HTML-Datei ausführen lassen - und zwar ohne Event-Handler, wie etwa onLoad?
Der Hintergrund: Ein Teil einer HTML-Seite wird abhängig von Browsereinstellungen unterschiedlich dargestellt - bisher so:

...  
<body>  
<p>Hier steht mein Text.</p>  
<script type="text/javascript">{...  
document.write("Das kann man nur lesen, wenn Javascript eingeschaltet ist.")  
}</script>  
<noscript>Für diesen Teil der Seite benötigen Sie Javascript.</noscript>  
<p>Und hier gehts weiter...</p>  
</body>  

Klappt problemlos.
Jetzt wird genau derselbe Code auch noch auf anderen Seiten benötigt. Deshalb bietet es sich ja an, den Script-Teil extern zu speichern. Solange der Script-Block ohne function(){...} in der Datei steht, geht es auch. Mit dem Nachteil, dass jetzt auf jeder Seite schon im Head-Teil das Javascript ausgeführt wird. Packt mans aber in eine Funktion, passiert gar nichts:

...  
<head>  
<script src="./js/scripts.js" type="text/javascript"></script>  
</head>  
<body>  
<p>Hier steht mein Text.</p>  
<script type="text/javascript">meineFunktion()</script>  
<noscript>Für diesen Teil der Seite benötigen Sie Javascript.</noscript>  
<p>Und hier gehts weiter...</p>  
</body>  

Lässt sich das meineFunktion() irgenwie kapseln? Vielen Dank schon mal!
ChrisP.

  1. Hallo, ChrisP.

    Dass das nicht funktioniert, bedeutet für mich, dass Du irgendwo einen Fehler gemacht hast. Bitte zeige uns die vollständigen Sourcen, wenn Du ihn nicht selbst findest. Dazu, Scripte in einer Seite zu kapseln, gibt es der Möglichkeiten viele. Wenn Du den Aufruf im HTML-Source machen möchtest, muss das Script vorher geladen sein.

    Falls Du ein Script genau dann aufrufen möchtest, wenn ein Node mit einer bestimmten ID geladen ist, kannst Du ein Interval setzen, in welchem Du die ID erfragst und benötigst weder onload noch muss das Script gleich im Head erscheinen.

    Falls Dir das schnelle Laden der Seite wichtiger ist, kannst Du das Script auch am Ende des body einbinden - allerdings solltest Du in jedem Fall zugunsten von DOM-Methoden/Eigenschaften wie appendChild, insertBefore und innerHTML auf document.write verzichten. Dieses Überbleibsel aus den Browserkriegen gehört wirklich nicht mehr eingesetzt.

    Gruß, LX

    --
    RFC 2324, Satz 7 (Sicherheit): Jeder, der zwischen meinem Kaffee und mir steht, gilt als unsicher.
    1. Hallo LX, hallo Joachim,
      danke für Eure Antworten! Zunächst bitte ich um Entschuldigung, wenn ich nicht mit Sourcen dienen kann. Ich programmiere nur manchmal nach Feierabend, und dann offline, so dass ich hier nur aus dem Kopf aufschreiben kann.
      Aber das

      allerdings solltest Du in jedem Fall ...auf document.write verzichten. Dieses Überbleibsel aus den Browserkriegen gehört wirklich nicht mehr eingesetzt.

      hat mir gezeigt, dass mein Wissen wohl sehr hinter der Zeit zurückgeblieben ist. Ich werde es beherzigen!
      Trotzdem nochmal die Frage: Eine im Head oder extern gespeicherte Funktion während des Renderns aufzurufen geht wohl nicht? In allen Beispielen wird dazu immer ein Ereignis erzeugt. Ein nutzerabhängiges Ereignis (Mouseover, Click o.ä.) will ich aber vermeiden. Und <body onLoad="MeineFunktion()"> geht definitiv nicht.
      ChrisP.

      1. Hi, ChrisP!

        Trotzdem nochmal die Frage: Eine im Head oder extern gespeicherte Funktion während des Renderns aufzurufen geht wohl nicht? In allen Beispielen wird dazu immer ein Ereignis erzeugt. Ein nutzerabhängiges Ereignis (Mouseover, Click o.ä.) will ich aber vermeiden. Und <body onLoad="MeineFunktion()"> geht definitiv nicht.
        ChrisP.

        Doch, das geht schon - vorausgesetzt, die Funktion ist rechtzeitig definiert. Wenn sie in einem Script steht, welches im head verlinkt ist, sollte das kein Problem sein.

        Auf document.ready oder window.onload zu warten hat den wesentlichen Vorteil, dass die Seite zu dieser Zeit bereits für den Nutzer verfügbar ist und so das Laden nicht verzögert wird.

        Gruß, LX

        --
        RFC 2324, Satz 7 (Sicherheit): Jeder, der zwischen meinem Kaffee und mir steht, gilt als unsicher.
        1. Hallo LX,
          ich danke Dir fürs Lesen und Antworten! Ich habs am WE zum Laufen gebracht, gleichzeitig aber gemerkt, dass es doch einige Nachteile hat, Funktionsaufrufe im HTML zu verteilen. (Und wenn es nur der ist, dass man nicht weiß, wo der Fehler steckt, im Aufruf oder im Script.)
          Also geh ich nochmal einen Schritt zurück und plane gleich barrierefrei.
          ChrisP.

  2. Hi,

    Solange der Script-Block ohne function(){...} in der Datei steht, geht es auch.

    Du kannst document.write nur ausführen _während_ das Dokument gerendert wird. Rufst Du onload eine Funktion, die ein document.write ausführt, überschreibt diese Dir Dein komplettes Dokument.

    Du kannst das Script dennoch auslagern, musst es aber dort einbinden, wo geschrieben werden soll - und zwar ohne Funktion (oder Du müsstest diese sofort im Anschluss aufrufen).

    Gruesse, Joachim

    --
    Am Ende wird alles gut.