Hoehe einer HTML-Seite ermitteln
Phil
- javascript
0 Phil
Guten Abend alle zusammen!
Ich moechte gerne per Javascript die Hoehe einer dargestellten HTML-Seite ermitteln. Genauer: NICHT der Innenbereich des Browserfensters, sondern der sichtbare Bereich + die Hoehe des unsichtbaren Bereichs, den ich erst durch das Herunterscrollen zu sehen bekomme.
Ich hab mich schon halbtot gesucht und bin etwa soweit gekommen:
fuer IE:
document.body.scrollHeight
a) Funktioniert es nur, wenn der JavaScript-Block mit im body-Tag
steht (sonst kennt er das Objekt nicht - wahrscheinlich weil
es vorher wohl nicht existiert...)
b) Habe ich gerade hestgestellt, dass der Wert sinkt, wenn ich
das Browser-Fenster verkleinere... daher gehe ich davon aus,
dass mir scrollHeight bei dem gesuchten nicht weiterhilft,
da ich ja die Hoehe des Dokumentes wissen will.
fuer NS:
document.meinLayer.clip.height
a) Funktioniert bei mir gar nicht...
bzw. ich mache etwas falsch
b) hilft mir clip.Height ueberhaupt weiter?
Ist das das richtige fuer das was ich will?
fuer NS 6:
welche Moeglichkeiten gibt es da?
Hier der unfertige Quellcode:
<html>
<head>
<title></title>
</head>
<body marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">
<layer id="meinLayer">
<SCRIPT language="JavaScript">
if (document.layers) {
alert(document.meinLayer.clip.Height);
}
if (document.all) {
alert(document.body.scrollHeight);
}
</SCRIPT>
Text Text Text Text Text Text Text Text Text Text Text
</layer>
</body>
Ich weiss noch nichtmal, ob mein Ansatz hier der richtige ist.
Letztendlich geht es darum, dass, wenn das dargestellte Dokument hoeher als 520 Pixel ist, ich ein bestimmtes leer.gif um 10 Pixel schmaler darstellen moechte, um so Platz fuer den vertikalen Scrollbalken zu machen, so dass kein horizontaler Scrollbalken entsteht.
Also:
Wenn Seitenlaenge > 520 dann
document.write(<img src="leer.gif" height="1" width="25">)
sonst
document.write(<img src="leer.gif" height="1" width="15">)
Oder gibt es eine Alternative, mit der man feststellen kann (im frameset ist scrolling=auto eingestellt), ob der vertikale Scrollbalken auftaucht oder nicht?
mfg
Phil
Also:
Wenn Seitenlaenge > 520 dann
document.write(<img src="leer.gif" height="1" width="25">)
sonst
document.write(<img src="leer.gif" height="1" width="15">)
ARG! Andersherum meinte ich das natuerlich!
mfg
Phil
P.S.: Sorry, dass ich ueberhaupt das Forum damit belaste, aber ich hab schon 3 Std. in diesem und anderen Foren gesucht, aber leider nichts gefunden, was mir weiterhilft. Waere super, wenn jemand den entscheidenden Denkanstoss fuer mein zermartertes Resthirn bereithaelt. ;-) THX
Also:
Wenn Seitenlaenge > 520 dann
document.write(<img src="leer.gif" height="1" width="25">)
sonst
document.write(<img src="leer.gif" height="1" width="15">)
ARG! Andersherum meinte ich das natuerlich!
mfg
Phil
P.S.: Sorry, dass ich ueberhaupt das Forum damit belaste, aber ich hab schon 3 Std. in diesem und anderen Foren gesucht, aber leider nichts gefunden, was mir weiterhilft. Waere super, wenn jemand den entscheidenden Denkanstoss fuer mein zermartertes Resthirn bereithaelt. ;-) THX
hi,
versuch es mal hiermit:
für internetexplorer müßte der wert, den du suchst in
document.body.offsetHeight
gespeichert sein,
für netscape ist es ein bischen schwieriger. ich denke, die beste möglichkeit ist folgende:
schreib einfach um den gesamten content, also alles zwischen den beiden body-tags folgendes:
<body>
<ilayer id="body">
...content...
</ilayer>
</body>
dann ist der wert so auszulesen:
if (document.all)
hoehe document.body.offsetHeight;
else if (document.layers)
hoehe= document.body.document.height;
Hallo!
Danke soweit, aber:
document.body.offsetHeight
hab ich probiert... ist auch nur irgendwie die Innenhoehe des Browserfensters, denn wenn ich das Fenster zusammenschiebe, wird der werd klleiner... z.B.: 250 Mein Dokument ist augenblicklich aber deutlich hoeher - so etwa 600 Pixel... es koennte aber auch abhaengig vom Inhalt eine andere Hoehe haben, daher mein versuch, diese per JavaScript zu ermitteln...
offsetHeight;
else if (document.layers)
hoehe= document.body.document.height;
darauf reagiert er komischerweise gar nicht...
war doch fuer Netscape 4.x gemeint oder?
Auf jeden Fall danke fuer deine Muehe!
mfg
Phil
Hi zusammen,
Netscape 4:
document.height
<javascript:{if (document.height) alert(document.height)}>
IE:
Am besten ein kleines transparentes 1x1 GIF ganz unten drunter, und dann
document.images[document.images.length-1].offsetTop (darf aber nicht in einer Table sein, da es wie gesagt _offset_ ist, ansonsten muss auch die Table gemessen werden)
Netscape 6 habe ich leider grad nicht im Kopf, offsetTop ist aber auch da auf jeden Fall eine Eigenschaft von Images, es geht da aber sicher auch ohne diesen Umweg...
Mirko
Hi!
Danke! Das hat funktioniert!
Interessanterweise ergibt das bei IE und NS4 die Dokumentenhoehe ohne das 1x1 leer.gif bzw. das gif liegt nicht direkt unter der Tabelle, in der das restliche Dokument "eingepackt" ist sondern 11 (bei IE Schrift 11px) bzw. 15 Pixel (bei NS4 Schrift 12px) darunter, so als ob das gif am unteren Rand der naechsten Textzeile ausgerichtet wird. Das gif wird aber bei beiden nicht in der Hoehen angabe nicht beruecksichtigt.
Jetzt habe ich noch das Problem, das ganze unter Netscape 6 und Opera 5 zum Laufen zu kriegen... ;-)
Dabei scheiter ich schon an der Browser-Detection_
beide reagieren weder auf if(document.all) noch aus if (document.layers)...
Mal sehen, entweder ich finde heute noch was oder ich poste heute abend noch n paar verzweifelte Fragen.
THX soweit!
mfg
Phil
Hi Du,
Dabei scheiter ich schon an der Browser-Detection_
beide reagieren weder auf if(document.all) noch aus if (document.layers)...
Diese Props sind ja auch total unwichtig. Check doch lieber direkt, ob die Sachen, die Du kennst bzw. brauchst, da sind:
if (document.height)
alert('oh prima, '+navigator.appName+' kennt document.height und sagt: '+document.height);
else (if document.images[document.images.length-1].offsetTop)
alert('oh prima, '+navigator.appName+' kennt document.images['+(document.images.length-1)+'].offsetTop und sagt: '+document.images[document.images.length-1].offsetTop);
usw...
Mal sehen, entweder ich finde heute noch was oder ich poste heute abend noch n paar verzweifelte Fragen.
Mirko
Ups,
da war eine Klammer an der falschen Stelle. Hier gleich das ganze Dokument:
<html>
<head>
<script>
function testIt()
{ if (document.height)
alert('oh prima, '+navigator.appName+' kennt document.height und sagt: '+document.height);
else if (document.images[document.images.length-1].offsetTop)
alert('oh prima, '+navigator.appName+' kennt document.images['+(document.images.length-1)+'].offsetTop und sagt:'+document.images[document.images.length-1].offsetTop);
}
</script>
</head>
<body onload="testIt()">
Hallo<br><br>
<img src="file:///" width=1 height=1>
</body>
</html>
Mirko
Hello again,
Netscape 6 kennt document.height auch (und "ubrigens auch offsetTop bei images, deshalb ist die Reihenfolge schon ganz gut so).
Das Problem bei dem Source aus dem vorigen Posting war nur das "file:///" als Quellangabe im img Tag - bei NN6 feuerte deshalb der onload Handler im Body Tag nicht.
also, statt <img src="file:///" ... irgendwas reinschreiben, was es gibt. Ist ja auch Wurscht, ist eh nur ein Test. Im echten hast Du ja ein trans. Gif.
Mirko
...THX!
Du hast mir sehr weitergeholfen!
Schoenes Wochenende!
mfg
Phil
Hi ihr beiden,
statt document.body.offsetHeight muss es
document.body.scrollHeight heissen.
Dann erspart man sich den Umweg über das gif.
lg Spiff