Christian Seiler: Übergeordnete DIV-Id aus Inline-Frame

Beitrag lesen

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