Problem mit setInterval, IFrames und FF3

MarcusS

Grünschnabel
Hallo,

ich habe folgenden Code-Block am Ende meiner HTML-Datei, die innerhalb eines IFrame[1] liegt:

Code:
function startServer() {
	if ("function" === typeof(top.serverZeitF)) {
		if (console.debug) console.debug('engine started');
		top.serverZeitF( 1220596642 );
		top.serverzeit = setInterval( "top.serverZeitF()", 1000 );
	}
	else {
		setTimeout("startServer()", 1000);
	}
}

if ("function" === typeof(top.serverZeitF)) {
	startServer();
}
else {
	setTimeout("startServer()", 1000);
}

in einem externen Javascript, welches im übergeordneten Frame eingebunden ist, findet sich die Funktion serverZeitF wie folgt definiert:
Code:
function serverZeitF( zeit ) {
	if (console.debug) console.debug("timer active");
	if( zeit ) server_zeit = zeit;
	else server_zeit++;
}


Nun ergibt sich unter Firefox 3 folgendes Fehlerbild, was ich bisher weder unter Firefox 2, noch unter IE 7 nachvollziehen konnte:
Beim Laden der Seite erhalte ich die Fehlermeldung:

---> top.serverZeitF is not a function
---> top.serverzeit = setInterval( "top.serverZeitF()", 1000 );

Der Verweis auf die Fehlerstelle zeigt auf die setInterval-Zeile der Funktion startServer. Nun stelle ich mir folgende Fragen, die ich bisher nicht beantworten kann:
a) Warum triggert der FF3 hier den Fehler, die zuvor per typeof geprüfte Funktion sei keine Funktion?
b) Und warum macht er das nur manchmal, aber nicht jedesmal?
c) Warum wird vor der Fehlerzeile die Funktion offenbar aufgerufen, zumindest triggert die Zeile mit Funktionsaufruf inkl. Parameter keinen Fehler (aber auch keine Ausgabe auf der Konsole)
d) Warum wird beim Aufruf der Seite nicht bereits vor dem Fehler die Ausgabe 'engine started' erzeugt?
e) Warum startet der Timer kurze Zeit später regulär und zeigt beide console-Ausgaben an?

Keine der beteiligten Funktionen wird an anderer Stelle überschrieben, oder an anderer Stelle aufgerufen. Gleiches gilt für die beteiligten globalen Variablen.

[1] Ich hab das nicht verbrochen, muss leider mit dem Code arbeiten...

Ich stehe hier grade irgendwie auf dem Schlauch, ich verstehe nicht warum der Fehler manchmal getriggert wird, manchmal nicht. Und vor allem warum mir das nur im FF3 passiert, nicht aber in anderen Browsern.
Kann mich jemand auf die richtige Spur zurückbringen?

Danke
Marcus
 
Moin Markus,

um das Naheliegendste auszuschliessen...wo steht im übergeordneten Dokument serverZeitF() ?

Vor oder nach dem iFrame, dessen Dokument darauf zugreift?

Weiterhin...du schreibst: "übergeordneten Frame"...das Dokument, in welchem serverZeitF() steht, befindet sich das auch in einem Frame oder an oberster Stelle der Fensterhierarchie....denn darauf verweist du per "top"
 
Hallo, danke für deine Antwort.

Das "übergeordnete Frame" ist die Hauptseite des Dokuments, welche verschiedene IFrames einbindet, und ist damit top.
Die Funktion serverZeitF() wird in einem externen Javascript-File definiert, welches in der Hauptseite im Head eingebunden wird.

Grüße
Marcus
 

Neue Beiträge

Zurück