Hallo,
Dieser Teil trifft einfach nie zu:
if (iframes[i].contentDocument == document) {Eine Idee, wie das lösbar ist?
Ok, ich hab etwas recherchiert und bin auf http://forum.de.selfhtml.org/archiv/2006/8/t134560/#m873073 gestoßen.
Ich habe das ganze dann jetzt mal in eine praktische Funktion gepackt, die einem das DOM-Element oder null zurückgibt, falls das DOM-Element nicht ermittelbar ist. Zudem funktioniert die Funktion jetzt sowohl mit <iframe>, <object> und <frame> (in Framesets). Die sieht jetzt so aus:
function parentFrameElement () {
function matches (iframe) {
return (iframe.contentWindow == self)
|| (iframe.contentDocument == document)
|| (iframe.document == document);
}
if (parent == self) {
return null;
}
var iframes = parent.document.getElementsByTagName ("iframe");
for (var i = 0; i < iframes.length; i++) {
if (matches (iframes[i])) {
return iframes[i];
}
}
var objects = parent.document.getElementsByTagName ("object");
for (var i = 0; i < objects.length; i++) {
if (matches (objects[i])) {
return objects[i];
}
}
var frames = parent.document.getElementsByTagName ("frame");
for (var i = 0; i < frames.length; i++) {
if (matches (frames[i])) {
return frames[i];
}
}
return null;
}
Das *sollte* jetzt auch im Internet Explorer klappen. Wer das ganze mal ausprobieren will:
2 <iframe>s und 1 <object>
<frameset> mit <frame>s
(Beim Frameset ist das Frameset allerdings beide Male das Elternelement von <frame>, deswegen zeigt mein Beispiel immer top-frameset an. Ich könnte es jetzt natürlich noch komplizierter machen, aber darauf habe ich keine Lust.)
Viele Grüße,
Christian