Das leidige Thema "Zugriff auf iframes"

Pius Hermit

Erfahrenes Mitglied
Hi folks,

habe einen interessanten Beitrag:
http://www.tutorials.de/forum/javascript-ajax/183561-uber-hauptfenster-style-iframe-aendern.html
gefunden, von welchem ich mir erhoffte, meine Probleme mit diesem lösen zu können.

Ich versuche mittels JS auf iframes Zugriff zu erhalten:
Code:
.LB {
	background-color:#FFB000;
	position:absolute;
	top:10%;
	height:80%;
	left:0;
	width:20%;
}
...
<body onload = "start()">
<iframe class="LB" id="Laufbalken"></iframe>	
...
//Klasse VBilder
/*	this.root = function(){
		return frames[0].document.body;
	}
*/	
	this.root = function(){
		if (document.getElementById('Laufbalken').contentDocument) {
			// Mozilla
			return document.getElementById('Laufbalken').contentDocument.body;
		}
		else {
			// IE
			return document.frames('Laufbalken').document.body;
		}
	}
...

	this.push = function(s){
		this.anzahl++;
		this.bild[this.anzahl] = this.root().createElement("img");
		this.root().body.appendChild(this.bild[this.anzahl]);
		this.bild[this.anzahl].id = this.toString()+"bild" + this.anzahl;
		this.bild[this.anzahl].src = s;
...
Nun funktioniert der Code im FF ansatzweise...Die Bildplatzhalter werden dargestellt,
aber die scr nicht eingefügt.
Im IE7 wird nichteinmal das CSS umgesetzt. Ich habe letzte Nacht etliche Stunden recherchiert und experimentiert, komme aber zu keiner Lösung. :mad:
Kann mir jemand weiterhelfen? - Bitte!
Danke,
Ulrich
p.s. Welches Tag nummeriert hier im Forum den Quellcode?
p.p.s. Wenn ich root anstatt als Methode zur Eigenschaft mache oder als Parameter übernehme, funktioniert das nicht! Hat das etwas mit by value/by referenz zu tun? Können Eigenschaften eines Objektes eigentlich selber Objekte sein?
 
Zuletzt bearbeitet:
So, fast geschafft!
Code:
//Klasse VBilder
 	this.root = function(){
		var oDoc = "";
		if (document.getElementById(frameID).contentDocument) {
			oDoc = document.getElementById(frameID).contentDocument;
			if (oDoc.document) oDoc = oDoc.document;
		}
		else {
			oDoc = document.frames(frameID).document;
		}
		return oDoc;
	}
...
	this.push = function(s){
		this.anzahl++;
		this.bild[this.anzahl] = this.root().createElement("img");
		this.root().body.appendChild(this.bild[this.anzahl]);
		this.bild[this.anzahl].id = this.toString()+"bild" + this.anzahl;
		this.bild[this.anzahl].src = s;
...
Dem Hintergrund der iframes habe ich jetzt
Code:
document.bgcolor
zugewiesen. Soweit funktioniert fast alles.
Das Problem, das noch ungelöst ist, bleibt weiterhin das Anzeigen von Bildplatzhaltern
im FF ohne Inhalt! Hat jemand dazu vielleicht ähnliche Erfahrungen gemacht?
Nachtrag: Die images haben alle die Richtigen Eigenschaften, auch im scr steht der korrekte String, bloß werden lediglich Platzhalter mit rotem Punkt in der linken, oberen Ecke gezeigt?!
 
Zuletzt bearbeitet:
Gelöst!
Ich habe probeweise eine Quelle (src) für die iframes angegeben, jetzt zeigt auch FF korrekt an. Was mich aber ärgert, ist, dass ich überhaupt eine Quelle angeben muß, wo ich die iframes nur als bessere viewports verwende. Gibt es zur source vielleich´t Alternativen im FF?
 
Hi,

du könntest beispielsweise vor dem Einfügen des ersten Bilds für den FF ein Dokument erstellen. Hierfür öffnest du das Dokument (open), schreibst mit write ein Grundgerüst und schliesst es wieder (close).

Beispiel:
Code:
function VBilder(){
	this.anzahl = -1;
	this.bild = new Array();


 	this.root = function(){
		var oDoc = "";
		if (document.getElementById(frameID).contentDocument) {
			oDoc = document.getElementById(frameID).contentDocument;
			if (oDoc.document) oDoc = oDoc.document;
		}
		else {
			oDoc = document.frames[frameID].document;
		}
		return oDoc;
	}

	this.push = function(s){
		this.anzahl++;

                // Vor dem Einfügen des ersten Bildes Dokument anlegen
                if(this.anzahl == 0)
                    this.newDoc();

		this.bild[this.anzahl] = this.root().createElement("img");
		this.root().getElementsByTagName("body")[0].appendChild(this.bild[this.anzahl]);
		this.bild[this.anzahl].id = this.toString()+"bild" + this.anzahl;
		this.bild[this.anzahl].src = s;
  }

  this.newDoc = function(){
	  objBilder.root().open();
          objBilder.root().write("<html>\n");
          objBilder.root().write("<head><title>myViewer</title></head>\n");
          objBilder.root().write("<body>\n");
          objBilder.root().write("</body></html>}\n");
	  objBilder.root().close();
  }
}

Ciao
Quaese
 
Coole Idee, Quaese!
Vielen Dank.
Aber: Muß ich unter src=... nicht einen String angeben?
Und kann jemand zu meinen postscripta aus dem Urbeitrag noch etwas schreiben?
"p.s. Welches Tag nummeriert hier im Forum den Quellcode?
p.p.s. Wenn ich root anstatt als Methode zur Eigenschaft mache oder als Parameter übernehme, funktioniert das nicht! Hat das etwas mit by value/by referenz zu tun? Können Eigenschaften eines Objektes eigentlich selber Objekte sein?"
 

Neue Beiträge

Zurück