Java-Applet, Mozilla und height=100%
Alexander Foken
- browser
Moin Moin !
Es ist mal wieder soweit, ich fange einen Thread an, weil ich mal wieder zu viele Bäume und zu wenig Wald sehe. ;-)
Ich habe:
* diverse Browser (IE>=5.0, NN 4.7x, Opera>=6.0, Mozilla>=1.0)
* ein Java-Applet
* ein Frameset
* ein Frame, in das das Applet mit Hilfe von Javascript (document.write('<applet ...');) eingebunden wird (mal als Applet, mal mit Object, mal mit Embed, je nach Browser - ich brauche ein halbwegs aktuelles Sun-JRE)
Ich will, daß das Applet das dafür vorgesehene Frame vollständig ausfüllt.
Ich weiß, daß <applet height="100%" width="100%"> nicht valide ist. Trotzdem spielen IE, Opera und die 4er-Serie vom Netscape brav mit und tun das, was ich will.
Nur der Mozilla hält sich strikt an das, was in den Standards steht, und will keine Prozentangaben sehen. Stattdessen interpretiert der Mozilla 100% als 0, egal ob im <applet> oder im <object>-Tag. Das Ergebnis ist ein zwar laufendes, aber unsichtbares Applet.
Was nun?
Alexander
Hi,
Ich weiß, daß <applet height="100%" width="100%"> nicht valide ist. Trotzdem spielen IE, Opera und die 4er-Serie vom Netscape brav mit und tun das, was ich will.
Nur der Mozilla hält sich strikt an das, was in den Standards steht, und will keine Prozentangaben sehen.
Das interpretierst Du falsch. width und height sind im Applet-Element als %Length; definiert, was wiederum wie folgt definiert wird:
Welche Höhe hast Du denn für das Elternelement des Applets angegeben? Und für dessen Elternelement? Und für dessen Elternelement? Und für ... Und für das HTML-Element?
cu,
Andreas
Moin Moin !
Hi,
Ich weiß, daß <applet height="100%" width="100%"> nicht valide ist. Trotzdem spielen IE, Opera und die 4er-Serie vom Netscape brav mit und tun das, was ich will.
Nur der Mozilla hält sich strikt an das, was in den Standards steht, und will keine Prozentangaben sehen.Das interpretierst Du falsch. width und height sind im Applet-Element als %Length; definiert, was wiederum wie folgt definiert wird:
Length: The value (%Length; in the DTD) may be either a %Pixel; or a percentage of the available horizontal or vertical space. Thus, the value "50%" means half of the available space.
"Available" sind 25% der Fensterbreite (<frameset cols="25%,*">) und die volle Höhe des Fensters. Das sieht der Mozilla nur leider nicht so.
Welche Höhe hast Du denn für das Elternelement des Applets angegeben? Und für dessen Elternelement? Und für dessen Elternelement? Und für ... Und für das HTML-Element?
Wenn Du so fragst: Der Code sieht prinzipiell so aus:
<html>
...
<body onload="..." onunload="...">
<script language="Javascript" type="text/javascript"></script>
<noscript>
<h1 align="center">Warning</h1>
<p align="center">JavaScript is disabled or not supported.</p>
<p align="center">Please enable JavaScript or upgrade your browser, as this application needs JavaScript for proper operation.</p>
<hr>
</noscript>
<script type="text/javascript" language="Javascript">
schreib_mir_mein_applet_tag(...); // effektiv: document.write('<applet ...>...</applet>');
</script>
</body>
</html>
Das Applet- bzw. Object-Tag sitzt also solo im Body-Tag, das wiederum im HTML-Tag, das wiederum in einem Frame ohne Höhenangaben.
Alexander
Hi,
<html>
...
<body onload="..." onunload="...">
Du hast also keine Höhe für die [Ur-...[Ur-[Groß-]...]Elternelemente des Applets gesetzt. (Es sei denn, in den ... steckt irgendwo CSS, daß diese Höhen setzt).
Setze diese auf 100%.
Denn sonst steht diese per default auf "auto", also so hoch wie benötigt - und 100% davon sind so wenig wie möglich.
cu,
Andreas
Moin Moin !
Hi,
<html>
...
<body onload="..." onunload="...">Du hast also keine Höhe für die [Ur-...[Ur-[Groß-]...]Elternelemente des Applets gesetzt. (Es sei denn, in den ... steckt irgendwo CSS, daß diese Höhen setzt).
Nope.
Setze diese auf 100%.
Mal sehen - das steckt alles tief in irgendwelchen Templates vergraben und wird dynamisch zusammengeklebt ...
Hilft nicht.
Denn sonst steht diese per default auf "auto", also so hoch wie benötigt - und 100% davon sind so wenig wie möglich.
Was wunder, daß ich einen Knoten im Hirn habe. Und warum funktionierts in den anderen Browsern ohne 100% im body? Ich werd' noch bekloppt ...
[Zwei Minuten wildes Getippe im Editor ...]
Die CGI-Library erzeugt
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
und bringt den Mozilla in den "Strikt nach Standard"-Modus. In HTML 4.01 Transitional gibt es kein height=100%, also ignoriert er es. Sabotiere ich die Doctype-Angabe, indem ich einfach vorher ein <HTML> ausgebe, funktioniert es!
Das ist natürlich nicht so ganz das, was ich mir vorgestellt habe.
Jetzt lautet meine Frage also: Wie bringe ich mein Applet zu 100% Höhe, ohne HTML 4.01 Transitional zu verletzen?
Alexander
Hi,
und bringt den Mozilla in den "Strikt nach Standard"-Modus. In HTML 4.01 Transitional gibt es kein height=100%, also ignoriert er es. Sabotiere ich die Doctype-Angabe, indem ich einfach vorher ein <HTML> ausgebe, funktioniert es!
Wo bitte hast Du die Info her, daß height="100%" im Applet-Element unter HTML 4.01 transitional falsch wäre?
height ist in transitional nicht nur erlaubt, sondern sogar required beim Applet-Element.
Und wie der Typ %Length; definiert ist, hatte ich ja schon gepostet.
Und selbst wenn es das Attribut nicht gäbe (wie in HTML 4.01 strict) - es gibt immer noch CSS.
cu,
Andreas
Moin Moin !
und bringt den Mozilla in den "Strikt nach Standard"-Modus. In HTML 4.01 Transitional gibt es kein height=100%, also ignoriert er es. Sabotiere ich die Doctype-Angabe, indem ich einfach vorher ein <HTML> ausgebe, funktioniert es!
Wo bitte hast Du die Info her, daß height="100%" im Applet-Element unter HTML 4.01 transitional falsch wäre?
Aus meinem Hinterkopf? Kann sein, daß das auch nur für Tabellen gilt ... ;-)
height ist in transitional nicht nur erlaubt, sondern sogar required beim Applet-Element.
Und wie der Typ %Length; definiert ist, hatte ich ja schon gepostet.
Ja, nur offensichtlich erwartet der Mozilla einen absoluten Wert und keinen prozentualen, wenn ein Doctype angegeben ist. Ich habe jetzt die Doctype-Angabe entfernt und alles funktioniert (bis auf die Tatsache, das das Applet in eine Endlosschleife rennt, das hat damit aber nichts zu tun).
Und selbst wenn es das Attribut nicht gäbe (wie in HTML 4.01 strict) - es gibt immer noch CSS.
Das habe ich auch schon ausprobiert, nur war da war auch noch der Doctype drin.
Ich habe so langsam das Gefühl, daß das entweder ein Bug oder beabsichtigtes Verhalten im Mozilla ist.
Alexander
Hi,
Ja, nur offensichtlich erwartet der Mozilla einen absoluten Wert und keinen prozentualen, wenn ein Doctype angegeben ist. Ich habe jetzt die Doctype-Angabe entfernt und alles funktioniert (bis auf die Tatsache, das das Applet in eine Endlosschleife rennt, das hat damit aber nichts zu tun).
Nein, gerade nochmal probiert. Selbstverständlich funktionieren auch prozentuale Angaben, siehe folgendes (valides) HTML-Dokument:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>test</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" >
<style type="text/css">
html,body { height:100%; margin:0; padding:0; border:none; }
</style>
</head><body>
<applet code="x.class" height="100%" width="100%"></applet>
</body></html>
Das ergibt eine einzige graue Fläche, die das gesamte Browserfenster füllt (weil die Klasse nicht existiert - bei kleineren Angaben wird die graue Fläche auch entsprechend kleiner.
Man muß nur - wie bereits mehrfach erwähnt - den übergeordneten Elementen ebenfalls eine Höhe zuweisen (da das bei body und html nicht per HTML geht, eben mit CSS).
Ich habe so langsam das Gefühl, daß das entweder ein Bug oder beabsichtigtes Verhalten im Mozilla ist.
Es ist standardkonformes Verhalten, daß sich prozentuale Höhenangaben auf die Höhe des parent-Elements beziehen.
Wenn dieses parent-Element keine explizite Höhenangabe hat, ist height:auto; default.
Und das bedeutet eben in der Praxis: so klein wie möglich. Von "so klein wie möglich" ist 100% immer noch "so klein wie möglich".
cu,
Andreas