Hallo allerseits,
ein recht seltsamer Grund für diese mysteriöse IE-Fehlermeldung wurde im Archiv schon angesprochen:
http://forum.de.selfhtml.org/archiv/2006/2/t123535/#m795433
Dieser Fehler wird ebenfalls geschmissen, wenn eine Methode eines Objekts aufgerufen wird, dessen Elternobjekt nicht mehr existiert.
z.B: ein Frameset mit 2 Frames, in Frame 1 wird eine Pseudoklasse definiert und instanziert:
function alertClass() {
this.doAlert = function() {
alert("hallo");
};
}
var alertInstance = new alertClass();
Frame 2 erstellt einen Zeiger auf die Instanz:
var ai = top.frames[0].alertInstance;
und ruft die Funktion bei Bedarf auf:
ai.doAlert()
Wenn in Frame 1 eine neue Seite geladen wird, bleibt die alertInstance bestehen, da es einen Zeiger gibt, der darauf verweist und wir haben ein hässliches Memory Leak gebastelt. Ein weiterer Aufruf von ai.doAlert() ergibt oben genannte Fehlermeldung im IE. Soweit nicht weiter überraschend...
Dreckige Stolperfalle: als Elternobjekt gilt in diesem Falle nicht das Objekt, in dem die Instanz erstellt wird, sondern das Objekt, das die Instanz erstellt hat.
Also: wenn beispielsweise Frame 1 nicht in sich selbst sondern im Frameset (top) eine Instanz der Pseudoklasse erstellt...
top.alertInstance = new alertClass();
... wirft der Aufruf einer Referenz darauf aus Frame 2 ebenfalls diesen Fehler, wenn Frame 1 eine neue Seite geladen hat (obwohl man eigentlich vermuten würde, dass sich für top nichts geändert hat)
var ai = top.alertInstance;
ai.doAlert()
Ich hoffe, das war einigermaßen verständlich. Ich habe in einem deutlich komplexerem Zusammenhang eine halbe Ewigkeit nach dem Fehler gesucht, ich hoffe, dass dieser Beitrag jemandem diese Ewigkeit verkürzen kann...
Viele Grüße,
Jens