Framenummer bei einem IFrame herausfinden

FreakDad

Mitglied
Hallo Leute,

so langsam aber sicher zerplatzt mir der Kopf. Ich bekomme für o. g. Problem einfach keine Lösung hin.

Anforderung an das JS:
1. Prüfe ob du in einem Frame geladen wurdest oder nicht.
2. Wenn ja, prüfe: ist die Größe des des Frames kleiner als X dann sage fehler.

Problem:
Da Internetseiten z. B. nicht nur ein IFrame haben, muss ich jetzt irgend wie herausfinden, in welchem IFrame oder Frame das JS geladen wurde.

Was bisher an Code vorhanden ist:
HTML:
<script language="JavaScript">
error=false;

if(parent.frames.length>0 && top.location != self.location){
	if(parent.frames[0].document.body.clientWidth < 728 || top.frames[0].document.body.clientWidth < 728){
		error=true;
	}
	if(parent.frames[0].document.body.clientHeight < 90 || top.frames[0].document.body.clientHeight < 90){
		error=true;
	}
}


if(error==true){
	document.write("fehler");
}else{
	document.write("schreiben");
}
</script>

Wie ihr oben seht, war mein dortiger Fehler immer das Frame 0 zu prüfen. Was natürlich schwachsinn ist.

Hier brauche ich halt noch eine Funktion, die mir sagt (oder prüft) in welchem Frame das o. g. JS ausgeführt wird.

Freue mich auf Antworten. ^^
 
Moin,

du versuchst gewissermassen, Eulen nach Athen zu Tragen :-)

Das, was du ermitteln willst, ist aus JS-Sicht das window-Objekt des aktuellen Dokumentes, aber das ist automatisch verfügbar, denn es ist der globale Geltungsbereich, in dem JS ausgeführt wird.

Du kannst also einfach
Code:
document.body.clientHeight
schreiben, oder auch:
Code:
window.document.body.clientHeight
bzw.
Code:
self.document.body.clientHeight


Um Browserkompatibilität zu wahren, solltest du aber besser:
Code:
document.getElementsByTagName('body')[0].clientHeight
verwenden.

Auch darfst du dies erst abfragen, sobald der <body> verfügbar ist, also am Besten beim onload.
 
OK, werde das Morgen mal testen. Manchmal denkt man halt etwas zu umständlich. ^^

Das mit dem Body und Co sollte passen, da es eine Überprüfung beim Ausliefern von Werbung ist. ^^
 
So weit funktioniert deine Idee, jedoch nur in der ersten Stuffe.

Hier mal das vorläufige Script:
HTML:
<script language="JavaScript">
error=false;

if(top.location != self.location){
	if(document.getElementsByTagName('body')[0].clientWidth < 728){
		error=true;
	}
	if(document.getElementsByTagName('body')[0].clientHeight < 90){
		error=true;
	}
}


if(error==true){
	document.write("fehler");
}else{
	document.write("schreiben");
}
</script>

Wenn jetzt jedoch ein IFrame eine Seite aufruft, die die Werbung innerhalb des IFrame ausliefert. So kann man nicht prüfen, wie groß das erste (top) Iframe ist. Man könnte daher auf Seite X ein 1x1 IFrame einbinden was auf eine Seite linkt, die ein 728x90 IFrame ausführt. Und das obige Script würde hier sagen, ich darf schreiben, obwohl er es nicht darf. Es fehlt also noch die oberste Ebene.
 
Dann angele dich die "Ebenen" empor:

Code:
window.onload=function()
{
 var me=self; 
 while(me!=top)
 {
  alert(me.document.getElementsByTagName('body')[0].clientHeight);
  me=me.parent;
 }
}

Eines aber gleich voraus:
Dies funktioniert nur, wenn sich alle "Ebenen" auf derselben Domain befinden wie das Dokument mit dem Skript.
Da ich annehme, dass gerade dies nicht der Fall sein wird bei deinem Vorhaben, musst du einfach damit leben, denn ein domainübergreifender Zugriff auf Dokumente per JS ist aus Sicherheitsgründen nicht möglich.
 
Habe jetzt en anderes Problem. Wenn das Frame ausserhalb des Sichtbereiches auf der Internetseite eingebunden ist, so erhällt man über clientWidth und clientHeight 0 zurück. Wie bekomme ich denn da jetzt meine richte Fenstergröße raus?
 
Was ist unter "ausserhalb des Sichtbereiches auf der Internetseite" zu Verstehen?(sorry, bin grad zu Faul, alle eventuellen Möglichkeiten auszuprobieren :-()
 

Neue Beiträge

Zurück