Timing-Probleme beim Funktionsaufruf in zu ladender js-Datei
Puschi
- javascript
Habe in meiner index.htm die Script-Datei layout.js eingebunden durch:
<script type="text/javascript" src="layout.js"></script>
Am Ende meiner index.htm rufe ich eine Funktion aus dieser layout.js auf. Dabei kommt es zu Zeitproblemen, daß z.B. die layout.js noch nicht vollständig geladen ist und somit der Funktionsaufruf von index.htm fehlschlägt.
Wie kann ich den Funktionsaufruf in index.htm freigeben, erst nachdem layout.js vollständig geladen wurde? Bitte nicht mit irgendwelchen setTimeOut-Funktionen! Es sollte auch automatisch ablaufen!
Komplizierter wird es wenn in layout.js wieder eine Einbindung zu einer weiteren js- oder css-Datei steht, auf die dann layout.js zugreifen will. So kann es passieren, daß ich mehrere Dateien einbinde und die Funktionsabarbeitung erst nach Laden aller Dateien beginnen soll.
Wurde sicher schon mal beantwortet, hab auch schon gesucht, doch noch nix gscheites gefunden.
Danke im Voraus
Puschi
Hi,
Am Ende meiner index.htm rufe ich eine Funktion aus dieser layout.js auf. Dabei kommt es zu Zeitproblemen, daß z.B. die layout.js noch nicht vollständig geladen ist und somit der Funktionsaufruf von index.htm fehlschlägt.
Ich glaube kaum, das es an der js Datei liegt, wie sieht denn der Fehler genau aus. Ich kann mir gut vorstellen, das auf ein Seitenelement zugegriffen wird, das zu dem Zeitpunkt noch nicht existiert.
Versuch doch einfach mal, den Funktionsaufruf in den onLoad Event des body Tags einzubauen. Sprich <body onLoad="Func()">
Gruß
ueps
genauer binde ich in meiner index.htm die index.js ein, die baut dann die index.htm nach drücken von "Go inside!" dynamisch neu auf, dabei stehen dann am Anfang der neu aufgebauten index.htm die Einbindungen zu verschiedenen Layout-Dateien. Am Ende erfolgt dann der Aufruf zur Formatierung der Seite zu Funktionen in den oben eingebundenen Dateien.
Derzeit baue ich die Seite bis vor den Funktionsaufruf auf (also wird schon mit dem Laden der Layout-Dateien begonnen) und unterbreche mit alert("stop"). Wenn ich unten in der Statuszeile des Browsers sehe, dass alle Dateien nachgeladen sind, bestätige ich das STOP-Signal und setze den Seitenaufbau bis zum Ende fort (dabei erfolgen dann die Formatierungs-Funktionsaufrufe).
Ohne Stop kommt es zum Fehler, das Objekte aus den Layout-Dateien nicht definiert sind (da noch nicht geladen).
Die Quelltexte stammen von http://webfx.eae.net/, will mich weiß Gott nicht mit fremden Lorbeeren schmücken! Bin bei mir noch beim Testen. Bisher funktioniert nur "Games" was eigentlich keine sind, eben zum Test.
Übrigens diese Seite ist net übel, aber english!!!
Danke und warte noch
Puschi
Hi,
Egal, ich habs auch so gefunden :-)
Ich denke am besten ist es wenn du die JS Funktionen solange versuchst aufzurufen bis Sie fertig geladen wurden.
Herzu mal ein kleines Beispiel Schema:
var finished1 = false;
function func1() // Funktion in der js Datei
{
alert('test');
finished1 = true;
}
// So lange Funktion aufrufen, bis kein Fehler mehr kommt:
while (finished1 == false)
{
try{ func1();}
catch (error) { }
}
Das ganze musst du halt noch mit deinen Funktionen umsetzen.
Dürfte eigentlich klappen.
Gruß
ueps
Habe dies ausprobiert:
while-Schleife in erste js-Datei
func1() ans Ende der 2. js-Datei
Funktionsaufruf klappte auch, aber die Variable finished1 aus der 1. js-Datei konnte ich nicht mit func1() der 2. js-Datei rücksetzen.
finished1 der 1. js-Datei ändert sich somit nicht und es ergibt Endlosschleife, die ich dann nach 10 Durchläufen gestoppt habe.
Jetzt liegt also das Problem in der Variablenübergabe zwischen den js-Dateien.
Die eigentlichen Formatierungsfunktionen habe ich mit dieser Methode nicht aufgerufen, das war mit doch zu aufwendig, da alles doch schon verdammt verschachtelt ist.
Ich suche nach der Methode, die einen Parameter der zu ladenden js-Datei an die aufrufende js-Datei übergibt und somit den Ablauf freigibt:
aufrufende js-Datei (index.js):
var parameter1 = 0;
var parameter2 = 0;
while (parameter1 != 1 && parameter2 != 1 && zaehler < 100)
{
//warteschleife
zaehler++;
}
augerufene js-Datei (test1.js)
...js-Inhalt...
parameter1 = 1;
augerufene js-Datei (test2.js)
...js-Inhalt...
parameter2 = 1;
Kann es daran liegen, daß ich beim Neuschreiben des Seiteninhaltes ja auch die Anbindung an meine aufrufende js-Datei überschreibe und diese dann für die aufrufenden js-Dateien nicht mehr sichtbar ist?
Tschau
Puschi
übrigens die fehlerhafte Variante ist jetzt bei (kann aber zum Aufhängen des IE-Explorer führen):
http://www.geocities.com/puschmanns/testfx/index1.html
Hi,
aufrufende js-Datei (index.js):
var parameter1 = 0;
var parameter2 = 0;
while (parameter1 != 1 && parameter2 != 1 && zaehler < 100)
{
//warteschleife
zaehler++;
}
augerufene js-Datei (test1.js)
...js-Inhalt...
parameter1 = 1;
Den Prameter kannst du kannst du aus der aufgerufenen js-Datei am besten per return übergeben.
d.h. du rufts ja irgendwelche Funktionen in index.js auf, die sich in test1.js befinden. Gibt es die Funktion noch nicht, muss die while Schleife nochmal durchlaufen. Gibt es die Funktion, muss diese am ende return 1 zurückgeben.
while (parameter1 != 1 && parameter2 != 1 && zaehler < 100)
{
try
{
parameter1 = Funktion();
}
catch (error){ }
zaehler++;
}
Gruß
ueps