Einzelnen Beitrag anzeigen
  #3 (permalink)  
Alt 29.11.2009, 03:55
.rhavin .rhavin ist offline
Ober-Telefondesinfizier
neuer user
Thread-Ersteller
 
Registriert seit: 24.11.2009
Ort: Berlin
Beiträge: 39
.rhavin befindet sich auf einem aufstrebenden Ast
Blinzeln

*loooooooooooooooool*

Ick gloobs nich....

Also, ich habs tatsächlich geschafft! Da es zuerst *nicht* ging, und mir der IE wenigstens immer genau anzeigt, wo der Fehler liegt, hatte ich zuerst mal mit den IE weiterprobiert, so frei nach dem Motto: Wenn die Zicke das hinbekommt, dann schafft es der FF ja wohl auch.
Nun hatte ich dabei die Rechnung ohne das w3c gemacht: denen hat das falsche Verhalten des IE (ständig die DTD nachzuladen, statt bei PUBLIC erstmal die lokale Kopie zunutzen) nämlich (endlich!) mal gereicht.

Da der Traffic auf den w3-Servern exorbitant anstieg, seit immer mehr Designer !DOCTYPEs benutzen und daher die IEs bei JEDER SEITE ne DTD vom w3c runterzuladen versuchten (man glaubt's ja nich, wenn man es nicht selber gesehn hat), hat das w3c die Notbremse gezogen und schlicht folgende policy gesetzt:

Kommt ein IE und will 'ne DTD runterladen, dann schmeiß ihn mit ner 503 raus.

Geil, oder? Dadurch brach dann immer mein Dokument im *.xml-Modus ab.

Dafür war der Fehler im FF ganz wo anders zu suchen, der hat nämlich einen mach-dem-DAU-das-Internet-easy-by-default-Modus, in dem LOKALE XLS's nicht ausgeführt werden. Einzustellen unter about:config -> security.fileuri.strict_origin_policy, wenn man es denn mal weiß, denn irgendeine entsprechende Warnung spuckt das Teil natürlich nicht aus;-/

Ein weiter nur-FF Bug: Kommt in einem CSS ein unbekannter Selector, also z.B. ...

HTML-Code:
dubidu {display:block;}
... verschluckt der sich irgendwie; daher sollten zuesrt alle Standard-xhtml-Tags frisiert werden und danach erst die eigenen.

Nun also die Lösung:
  • die DTD muß per Browserweiche raus, also im IE ohne DTD.
  • das body-tag muß per xsl:template nochmal neu definiert werden, da kann man dann auch den onload-handler benutzen.
  • das css-stylesheet muß gleich zweimal eingebunden werden (dafür muß das Head-Tag auch neu definiert werden), und war am besten so:

Die als *.xml gespeichte xhtml-Datei:
HTML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl" ?>
<!-- note: title as attribute of head-->
<html><head title="test-xml">
	<!--  ... -->
</head><body>
	<!--  ... -->
</body></html>
das XSL-Stylesheet (Auszug):
HTML-Code:
<!-- stylesheet name und pfad als variable. Note inner quotes! -->
<xsl:variable name="stylesheet" select="'stylesheet.css'" />

<xsl:template match="/">
	<xsl:processing-instruction name="xml-stylesheet">
		<xsl:attribute name="href"><xsl:value-of select="$stylesheet" /></xsl:attribute>
		<xsl:attribute name="type">text/css</xsl:attribute>
	</xsl:processing-instruction>
	<html>
		<xsl:apply-templates />
	</html>
</xsl:template>

<xsl:template match="head">
	<head>
		<!-- insert title from heads title attribute -->
		<title><xsl:value-of select="@title"/></title>
		<link rel="stylesheet" type="text/css">
			<xsl:attribute name="href"><xsl:value-of select="$stylesheet" /></xsl:attribute>
		</link>
		<xsl:apply-templates />
	</head>
</xsl:template>

<xsl:template match="body">
	<body onload="alert('onload handler executed!');">
		<xsl:apply-templates />
	</body>
</xsl:template>

Geändert von .rhavin (29.11.2009 um 12:34 Uhr)
Mit Zitat antworten