Felix Riesterer: onload einige Init-Funktionen immer, andere manchmal

Beitrag lesen

Lieber Gernot,

was spricht denn dagegen, dass jedes Script von Dir seine eigene Einbindung in die window.onload-Funktion vornimmt?

Ich habe mir angewöhnt, alle Scripte extern auszulagern, als eigene Objekte zu definieren und ihre jeweils eigene Initialisierung vornehmen zu lassen. Da sie als eigene Objekte existieren, kann ich bequem die jeweils vorhandenen window.onload-Funktionen in ihnen als eine Eigenschaft "oldWinOnLoad" speichern (und andere Events wie z.B. window.onResize "verbiege" ich ebenso).

Beispiel (externe .js-Datei): ---------------------------------------------

meinObjekt = {  
    eineFunktion : function (param) {  
        code...  
    },  
  
    // Initialisierungsfunktion, um Einstellungen für meinObjekt vorzunehmen  
    init : function () {  
        ... Code ...  
    },  
  
    // onload-Handler erweitern  
    onloadEinbinden : function () {  
        if (typeof(window.onload) == "function")  
            // alten Handler speichern  
            meinObjekt.oldWinOnLoad = window.onload;  
        // onload-Handler in eine Funktion einwickeln  
        window.onload = function () {  
            if (meinObjekt.oldWinOnLoad)  
                // existiert nur, wenn auch eine Funktion drinnesteckt  
                meinObjekt.oldWinOnLoad(); // alte onload-Funktion(en) ausführen  
            meinObjekt.init();  
        };  
    } // hier natürlich KEIN KOMMA (weil keine weitere Methode/Eigenschaft mehr folgt)  
}; // meinObjekt zu Ende  
  
// Jetzt in den onload-Event einbinden:  
meinObjekt.onloadEinbinden();

---------------------------------------------------------------------------

Dieses Vorgehen ermöglicht es mir, beliebig meine Scripte auf Seiten einzubinden und dabei beliebig zu kombinieren. Ich muss sogar auf einer Seite (in meinem Dateimanager) ein bereits so eingebundenes Script ("Explorer" für das dynamische Auf- und Zuklappen, siehe Download-Seite) "patchen", damit es auf die gesonderten Anforderungen (Unterordner per AJAX nachladen) reagieren kann.

Das geht auch sehr einfach, indem man bereits definierte Funktionen oder Objekte einfach erweitert...

Beispiel von oben erweitert:

meinObjekt.eineFunktion = function (params) {  
    // neuer Code für diese Funktion  
    meinObjekt.neueEigenschaft = 'irgendetwas';  
    return false;  
};

Liebe Grüße aus Ellwangen,

Felix Riesterer.

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