Felix Riesterer: window.onload bereits während des Ladens manuell auslösen?

Liebe JavaScript-Spezialisten,

ich möchte mit meinen Scripts Manipulationen am DOM oder Fokussierungen beim bzw. sofort nach dem Laden der Seite vornehmen. Bisher tue ich das so, wie ich es in meinem Artikel auch beschrieben habe, nämlich über window.onload.

Da mir window.onload natürlich bei entsprechend langsamen Verbindungen "zu lange dauert", vor allem dann, wenn viele referenzierte (Grafik-)Dateien nachzuladen sind, möchte ich natürlich etwas wie onDomReady haben, aber ohne jetzt alle meine JavaScripte umschreiben zu müssen. Ein Updaten der Scripte, die ich z.T. als eigenständige Werke entwickle, würde sich dadurch nur unnötig verkomplizieren. Daher dachte ich mir, window.onload() manuell auszuführen, nachdem der <body> des Dokuments komplett geladen wurde. Dazu habe ich im Rahmen meines CMS folgende Lösung entwickelt und wollte von Euch wissen, ob das grundsätzlich problematisch ist, oder ob man das durchaus im Rahmen meines CMS so machen kann (folgender Code wird auf jeder Seite automatisch ergänzt).

<body>[...]  
<script type="text/javascript">//<![CDATA[
	// Jetzt window.onload ausführen, um damit onDomReady zu simulieren  
	if (typeof window.onload == "function")  
		window.onload();  
	window.onload = function () { return false; };
//]]></script>  
</body>

Bis jetzt ist mir auf keiner Seite aufgefallen, dass es irgendwelche Störungen oder gar Fehlermeldungen gegeben hätte... oder sieht jemand in dieser Vorgehensweise irgendwelche Probleme, die ich vielleicht übersehen haben könnte?

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  1. Hallo Felix,

    Liebe JavaScript-Spezialisten,

    da fühle ich mich nur bedingt angesprochen, aber immerhin ...

    Da mir window.onload natürlich bei entsprechend langsamen Verbindungen "zu lange dauert", vor allem dann, wenn viele referenzierte (Grafik-)Dateien nachzuladen sind, möchte ich natürlich etwas wie onDomReady haben, aber ohne jetzt alle meine JavaScripte umschreiben zu müssen. Ein Updaten der Scripte, die ich z.T. als eigenständige Werke entwickle, würde sich dadurch nur unnötig verkomplizieren. Daher dachte ich mir, window.onload() manuell auszuführen, nachdem der <body> des Dokuments komplett geladen wurde.

    Das kann man natürlich tun.

    <body>[...]

    <script type="text/javascript">//<![CDATA[

    
    > ~~~javascript
    
    	// Jetzt window.onload ausführen, um damit onDomReady zu simulieren  
    
    > 	if (typeof window.onload == "function")  
    > 		window.onload();  
    > 	window.onload = function () { return false; };
    
    

    //]]></script>

    </body>

      
    Dieser Code wird vermutlich am \*Ende\* des body-Elements eingesetzt?  
      
    
    > Bis jetzt ist mir auf keiner Seite aufgefallen, dass es irgendwelche Störungen oder gar Fehlermeldungen gegeben hätte... oder sieht jemand in dieser Vorgehensweise irgendwelche Probleme, die ich vielleicht übersehen haben könnte?  
      
    Ja. Bestimmte Dokumenteigenschaften wie z.B. Abstand oder Position gewisser Elemente können sich abhängig von der Größe der dazwischenliegenden img-Elemente ändern. Fragst du also solche Werte ab, bevor die Bilder geladen sind, ermittelst du eventuell falsche Werte. Ganz offensichtlich wird es, wenn du auf Eigenschaften noch nicht geladener Bilder zugreifst.  
    Wenn dein Handler \*wirklich\* onload aufgerufen wird, muss er sich um solche Gemeinheiten ja nicht mehr sorgen - zu dem Zeitpunkt sind alle Objekte da und die Maße stehen fest.  
      
    Ein anderer Schönheitsfehler könnte sein, dass dein onload-Handler nach dem Feritgladen des Dokuments und der eingebundenen Ressourcen ein zweites Mal aufgerufen wird.  
      
    So long,  
     Martin  
    
    -- 
    Abraham sprach zu Bebraham: Kann i mal dei Cebra ham?
    
    1. Moin,

      Ein anderer Schönheitsfehler könnte sein, dass dein onload-Handler nach dem Feritgladen des Dokuments und der eingebundenen Ressourcen ein zweites Mal aufgerufen wird.

      Aber Martin, dass ist auf jeden Fall kein Problem, da ja window.onload mit einer leeren Funktion überschrieben wurde, tendenziell würde ich aber eher sowas wie: window.onload = undefined; schreiben, ist aber marginal.

      Nun zu deiner Frage, im IE ist das meines Wissens nach überhaupt kein Problem (abwechslungsreicher Weise), lediglich Opera hat bei mir in Situationen in denen ich unortodoxe Aufrufe machen wollte, manchmal gestreikt, aber wenn es da funktioniert, sollte es eigentlich kein Problem sein. Außerdem machst du da ja nichts anderes, als das was du in deinen Autostart-Funktionen bisher auch gemacht hast, nur nicht mit einer Kopie, sondern mit dem Original - soll heißen wenn du es etwas hübscher haben willst, kannst du es auch so schreiben:

        
      var _onload = window.onload;  
      window.onload = undefined;  
      if(typeof _onload == "function")_onload();  
      
      

      MfG nemoinho