# Hartnäckiges Anzeigeproblem im IE



## Tritonus (2. März 2010)

Hallo zusammen,

nach längerer Zeit als interessierter Gastleser, habe ich nun ein hartnäckiges Problem, welches ich hier vorstellen möchte,

Ich bin derzeit mit der Pflege einer existierenden Webapplikation (serverbased) beauftragt, die vom Server gelieferte Daten mittels XML-Strukturen im Browser darstellen und manipulieren soll.
Die bisher gewählte Lösung durch framesets läuft (browserunabhängig) wunderbar, sieht aber etwas "hausbacken" aus und ist für eine Designanpassung nicht wirklich geeignet.

Meine Idee die Oberfläche durch einheitlichen fließenden Hintergrund und Einteilung per divs zu verbessern steht nun in Frage.Angedacht hatte ich, die benötigten Targetbereiche für den Datenaustausch duch transparente iframes zu verwirklichen. Nachdem ich das von Microsoft erfundene Zauberwort "allowtransparency" endlich gefunden hatte, schien alles bestens zu laufen - bis ich XML-Daten durch entsprechende Stylesheets darstellen wollte.

Ich habe das Problem in ein paar Codeschnipseln mal auf das Wesentliche reduziert.

Die folgende index.html beinhaltet zwei transparente divs mit eingebetteten iframes:

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>iframe test</title>
		<style type="text/css">
			#iframeArea1 {
				overflow:auto; 
				position:absolute; 
				z-index:1; 
				top:80px; 
				left:80px; 
				bottom:50px;
				right:80px; 
				height:200px;
				background:transparent;
			}
			#iframeArea2 {
				overflow:auto; 
				position:absolute; 
				z-index:1; 
				top:380px; 
				left:80px; 
				bottom:50px;
				right:80px; 
				height:200px;
				background:transparent;
			}
		</style>	
	</head>

	<body style="background-color:#0000c0;">
		<div id="iframeArea1" style="background-color:transparent;">
			<iframe id="myIFrame1" src="iframe.html" allowtransparency="true" width="98%" height="98%" frameborder="1" marginheight="0" marginwidth="0" scrolling="no" noresize="noresize"></iframe>
		</div>
		<div id="iframeArea2" style="background-color:transparent;">
			<iframe id="myIFrame2" src="iframe.xml"  allowtransparency="true" width="98%" height="98%" frameborder="1" marginheight="0" marginwidth="0" scrolling="no" noresize="noresize"></iframe>
		</div>
	</body>	
</html>
```
frame1 soll eine externe HTML-Datei darstellen (iframe.html):

```
<?xml version="1.0">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>iframe HTML test</title>
	</head>
	
	<body style="background-color:transparent;">
		<p align="center" style="color:#00c0c0;">
			Transparent HTML iFrame
		</p>
	</body>
</html>
```
frame2 eine XML-Struktur D) iframe.xml, die mit dem Stylesheet iframe.xsl eigentlich zu einem ähnlichen Ergebnis führen müßte:

```
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="iframe.xsl"?>

<main>
</main>
```


```
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output
	  method="html"
	  version="4.01"
	  indent="yes"
	  omit-xml-declaration="yes"
	  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
	  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
	  encoding="UTF-8"
	/>
	
	<xsl:template match="main">
		<html>
			<head>
				<title>iframe XML Test</title>
			</head>
			<body style="background-color:transparent;">
				<p align="center" style="color:#00c0c0;">
					Transparent XML iFrame
				</p>
			</body>
		</html>
	</xsl:template>
	
</xsl:stylesheet>
```
Im Firefox 3++ ist dem auch so, beide frames werden transparent dargestellt. IE7 weigert sich aber beharrlich den XML-frame transparent darzustellen.
Leider ist das offensichtlich auch bei Datenstrukturen, die ser Server liefert so.
Es wirkt kein "allowtransparency", alpha-filter oder ähnliches, was bei HTML-Sourcen zum Erfolgt führt 

Vielleicht hat ja hier im Forum jemand ein ähnliches Problem schonmal gelöst 

Alternativ wäre es schon hilfreich, wenn ich wüßte, wie man die benötigten Targetbereiche durch andere Mittel (framelos) definieren kann.

Für eure Mühe schon mal meinen Dank. Ich hoffe das Problem kommt rüber und ist durch das Beispiel nachvollziehbar.


----------



## Maik (2. März 2010)

Hi,

wie wäre es, die Daten beispielsweise per PHP direkt in die beiden DIV-Blöcke zu laden, und die  iFrames in die Tonne zu kloppen?

mfg Maik


----------



## Tritonus (2. März 2010)

Hallo Maik,

sorry, komme jetzt erst zum Antworten ...



Maik hat gesagt.:


> wie wäre es, die Daten beispielsweise per PHP direkt in die beiden DIV-Blöcke zu laden, und die  iFrames in die Tonne zu kloppen?



Klar habe ich mir überlegt, die Framerei ganz los zu werden. Aber...
Ich bin in php nicht sonderlich bewandert, meines Wissen (ich lass mich gerne belehren) hat php derzeit noch keinen internen XSLT-Prozessor und arbeitet nur mit ausgesuchten externen.
Würde es sich bei den Daten nur um eine immer gleiche Struktur handeln, wäre auch das kein Problem. Nur, derzeit existieren hier über 10000 Zeilen XSL-Stylesheets, um die Strukturen zu verarbeiten. Das käme dann wohl einer kompletten Neuentwicklung gleich.

Deshalb habe ich die Hoffnung noch nicht aufgegeben, dem IE das noch beizubiegen. 

Danke für Deine Antwort.


----------



## hela (2. März 2010)

Tritonus hat gesagt.:


> ... Klar habe ich mir überlegt, die Framerei ganz los zu werden. Aber...
> Ich bin in php nicht sonderlich bewandert, meines Wissen (ich lass mich gerne belehren) hat php derzeit noch keinen internen XSLT-Prozessor und arbeitet nur mit ausgesuchten externen.
> Würde es sich bei den Daten nur um eine immer gleiche Struktur handeln, wäre auch das kein Problem. Nur, derzeit existieren hier über 10000 Zeilen XSL-Stylesheets, um die Strukturen zu verarbeiten. Das käme dann wohl einer kompletten Neuentwicklung gleich.


Hallo Tritonus,

ich verstehe deine Argumentation nicht und bin ebenfalls der Meinung, dass man Frames/iFrames vermeiden sollte.


 Wenn PHP5 mit der XSL-Erweiterung installiert wurde, dann steht ein XSLT-Prozessor auf Basis von Libxslt zur Verfügung (Anhang: Auszug aus der php-info unter PHP5.2.6). Der Copy-XML-Editor arbeitet bei der XSLT auf der gleichen Basis und die Transformationen, die mit de Copy-XML-Editor fehlerfrei ablaufen, sind bei mir bisher auch unter PHP5 abgelaufen. Aber vielleicht steht dir kein Server mit PHP5 zur Verfügung?
 Wird in deinem zweiten iFrame wirklich die Datei "iframe.xml" aufgerufen, die auf "iframe.xsl" verweist? Wenn die XSL-Stylesheet-Datei wirklich so gewaltig ist, dann sollte man die Transformation vielleicht doch nicht dem Client überlassen.
Ich sehe also auch keinen Grund, der zur Verwendung von iFrames drängt.


----------

