Javascript Tücken

Bei der Optimierung meiner Webseiten hat sich der Javascript-Anteil immer weiter erhöht.
Hier möchte ich auf meine speziellen Erfahrungen verweisen, damit Verwalter ähnlicher Projekte darauf zurückgreifen können.

Alle Probleme hängen mit dem Timing zusammen.
In einem Rahmensystem kann zwar jedes Fenster die Variablen und Funktionen eines anderen Fensters benutzen, es muss aber sicherstellen, dass die Nachbarobjekte zum Aufrufzeitpunkt auch existieren (typischerweise treten solche Probleme nur im Online-Betrieb auf, wenn Ladezeiten ins Gewicht fallen).

Bei der Abfrage, ob ein Objekt im Nachbarfenster ansprechbar ist, darf ich das eigentliche Objekt erst ansprechen, wenn ich mich schrittweise von der Existenz der übergeordneten Objekte überzeugt habe. Die Existenz des Fensters sichert noch nicht die Existenz der darin definierten Funktionen! Ich könnte ja genau in der Ladezeit zuschlagen!



Beispiel:

Angenommen mein Rahmensystem definiert 2 Fenster, Fenster_1 und Fenster_2.
Fenster_1 enthält eine Funktion Action (), die aus Fenster_2 aufgerufen werden soll.
Dann führt in Fenster_2 folgender Code zum Erfolg:



function zu_frueh ()
{
if (Fenster_1)
    if (Fenster_1.Action)
        return false;

return true;
}




function ruf_Action ()
{
if (!zu_frueh ())
    Fenster_1.Action ()
else
    setTimeout ("ruf_Action ()", 500);
}





ruf_Action ();

Sollte es notwendig sein, der Funktion Action () einen Parameter zu übergeben, darf keinesfalls eine Variable übergeben werden. Diese könnte zum Zeitpunkt des Timeouts schon nicht mehr existieren. Eine Variable als Parameter muss bei der Übergabe in setTimeout () in eine Konstante aufgelöst werden. Dies ist kein Problem, da ja ein String übergeben wird, der natürlich auch aus Teilstücken zusammengesetzt werden kann.






Stand: 15.11.2002