HeHo,
ich moechte ein Objekt erstellen, das alle wichtigen Werte zu Screen, Window, und Document liefert. Und das fuer alle gaengigen Browser. Ich hatte schon mal sowas geschrieben, etwas kleiner und unvollstaendiger, aber selbst gebastelt. Das funktioniert leider nicht mehr seit es den IE6 gibt.
Da ich mir erst vor einer Woche das Teil installiert habe (den IE6) war ich etwas ueberrascht das das nicht mehr klappt.
Jetzt habe ich mittlerweile 'ne Menge ueber DocType-Switching, + standards-compliant-mode etc. gelesen.
Trotzdem bekomme ich mein Script nicht zum laufen, noch nicht mal in der einfachen Version, ohne DocType-Angabe!
Eigentlich muesste der IE 6 oder IE 5.5 dann doch wie ein "document.all-ich-bin-ein-4er-Browser" reagieren.
Er meldet sich auch mit dem Testweise dafuer eingesetzten alert(), aber er gibt mir nicht die Werte aus, sondern beschwert sich mit der Fehlermeldung: C.scrW ist null oder kein Objekt. Das sagt er zu allen Variablen aus dem Objekt ob_all().
Die anderen Browser (NN4 NN6.2 Mozilla Opera6) meckern nicht, sondern geben artig alles aus. Ist vielleicht mein IE kaputt?? :) -Ne, kann eigentlich nicht sein. Also nicht alle beide auf einmal, IE 5.5 und 6. Ich werde wohl vor lauter Baeumen den Wald nicht mehr sehen, oder sowas.
Mir schwirrt auch schon der Kopf, (ob das die Energie des Verstehens ist??, Ne, ich glaub im Moment nicht. :()
Also, hier ist erstmal ein Link zu der Test-Datei:
http://www.nogajski.de/test/objekt_all.html
Und jetzt kommt gleich im Nachspann noch der ganze Quellcode zu dem neuen Objekt, und vergleichsweise auch mal die alten. Wenn jemand Zeit und Lust hat, moechte er sich das doch mal anschauen, und mir sagen, warum der IE mir nicht die Werte rausrueckt.
PS: Wenn jemandem das Script irgendwie bekannt vorkommt, ich hab den groessten Teil aus der Testdatei von Thomas Meinike http://www.styleassistant.de/tips/screen.htm uebernommen. ;)
Viele Gruesse,
Horst
______________________
kompletter JS-Teil im Head:
Body-Teil siehe Testdatei: http://www.nogajski.de/test/objekt_all.html
<script language="JavaScript" type="text/JavaScript">
<!--
// BrowserSniffer:
var agt=navigator.userAgent.toLowerCase();
// *** BROWSER VERSION CHECK ***
var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);
var is_nn = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) && (agt.indexOf('webtv')==-1));
var is_ie = (agt.indexOf("msie") != -1);
var is_opera = (agt.indexOf("opera") != -1);
// altes Objekt fuer Screen-Werte
function ob_screen() {
var scrB = screen.width;
var scrH = screen.height;
var SV = (screen.width / screen.height);
var screenBREITE = screen.availWidth;
var screenHOEHE = screen.availHeight;
this.B = scrB; // ganze ScreenBreite
this.b = screenBREITE; // verfuegbare Screenbreite
this.H = scrH; // ganze ScreenHoehe
this.h = screenHOEHE; // verfuegbare Screenhoehe
this.SV = SV; // Seitenverhältnis des gesamten Screens
}
// altes Objekt fuer Win-Werte
// Objekt, das die Innenmasse und Position eines Fensters zurueckgibt
// Laueft in NN4.x, Mozilla, K-Meleon0.6, NN6.2x, IE5.x,
// In Opera gibt es eine Einschränkung in der Erkennung der Position eines Fensters,
// wenn sich dieses nicht innerhalb des Opera-Mutterfensters befindet, also wenn Opera nicht im Tabbed-Modus betrieben wird.
function ob_win() {
var docwidth, docheight, PosX, PosY;
if (document.body) {
docwidth = document.body.clientWidth;
if (!docwidth) {
docwidth = self.innerWidth;
}
} else if (self) {
docwidth = self.innerWidth + 4;
}
if (document.body) {
docheight = document.body.clientHeight;
if (!docheight) {
docheight = self.innerHeight;
}
} else if (self) {
docheight = self.innerHeight;
}
if (is_ie) {
PosX = window.screenLeft;
PosY = window.screenTop;
} else {
PosX = window.screenX;
PosY = window.screenY;
if (is_opera) {
// Da Opera wenn er nicht im Tabbed-Mode laeuft, irgendwelche Minuswerte angibt,
// wird hier ein StandardPositionswert angegeben.
// (Das Mutterfenster selbst erkennt auch nicht die eigene Position am Bildschirm.)
if (PosX <= 0) PosX = 50;
if (PosY <= 0) PosY = 50;
}
}
this.B = docwidth;
this.H = docheight;
this.X = PosX;
this.Y = PosY;
}
var scr = new ob_screen();
var win = new ob_win();
function ob_all() {
var scrW, scrH, scrAW, scrAH, scrSV;
var docW, docH, docX, docY;
var winIW, winIH, winOW, winOH, winX, winY;
var bw;
// Screen
scrW=screen.width;
scrH=screen.height;
scrAW=screen.availWidth;
scrAH=screen.availHeight;
scrSV=scrW/scrH;
//Netscape-Eigenschaften
if ((document.layers || document.getElementById) && navigator.appName=="Netscape" && navigator.userAgent.indexOf("Opera")==-1) {
winIW=window.innerWidth;
winIH=window.innerHeight;
winOW=window.outerWidth;
winOH=window.outerHeight;
winX=window.pageXOffset;
winY=window.pageYOffset;
docW=document.width;
docH=document.height;
bw="Netscape";
}
// IE-spezifische Angaben
if (document.all && navigator.userAgent.indexOf("Opera")==-1) {
alert ("Ich IE alter Browser, Hugh");
winIW=document.body.clientWidth;
winIH=document.body.clientHeight;
winOW=document.body.offsetWidth;
winOH=document.body.offsetHeight;
winX=document.body.scrollLeft;
winY=document.body.scrollTop;
docW=document.body.scrollWidth;
docH=document.body.scrollHeight;
docX=window.screenLeft;
docY=window.screenTop;
bw="IE (document.all)";
}
/* <--
Die beiden nächsten Blöcke sind zur Zeit noch disabled, weil es noch gar nicht mit dem IE klappt!!
// IE6 im standards-compliant-mode
if(navigator.userAgent.indexOf("MSIE 6")!=-1 && document.compatMode=="CSS1Compat") {
alert ("Ich IE ganz neuer Browser, WoW!");
winIW=document.documentElement.clientWidth;
winIH=document.documentElement.clientHeight;
winOW=document.documentElement.offsetWidth;
winOH=document.documentElement.offsetHeight;
winX=document.documentElement.scrollLeft;
winY=document.documentElement.scrollTop;
docW=document.documentElement.scrollWidth;
docH=document.documentElement.scrollHeight;
docX=window.screenLeft;
docY=window.screenTop;
bw="IE 6 (CSS1Compat)";
}
// IE6 im Quirks-mode
if(navigator.userAgent.indexOf("MSIE 6")!=-1 && document.compatMode=="BackCompat") {
alert ("Ich IE alter Browser, Hugh");
winIW=document.body.clientWidth;
winIH=document.body.clientHeight;
winOW=document.body.offsetWidth;
winOH=document.body.offsetHeight;
winX=document.body.scrollLeft;
winY=document.body.scrollTop;
docW=document.body.scrollWidth;
docH=document.body.scrollHeight;
docX=window.screenLeft;
docY=window.screenTop;
bw="IE 6 (BackCompat)";
}
disabled --> */
// Opera-Eigenschaften
if (navigator.userAgent.indexOf("Opera")!=-1) {
winIW=window.innerWidth;
winIH=window.innerHeight;
winOW=window.outerWidth;
winOH=window.outerHeight;
winX=window.pageXOffset;
winY=window.pageYOffset;
bw="Opera";
}
this.bw=bw;
this.scrW=scrW;
this.scrH=scrH;
this.scrAW=scrAW;
this.scrAH=scrAH;
this.scrSV=scrSV;
this.winIW=winIW; //Fensterbreite, innen
this.winIH=winIH; //Fensterhöhe, innen
this.winOW=winOW; //Fensterbreite, aussen
this.winOH=winOH; //Fensterhöhe, aussen
this.winX=winX; //x-Scrollposition
this.winY=winY; //y-Scrollposition
this.docW=docW; //Breite des Dokuments
this.docH=docH; //Höhe des Dokuments
this.docX=docX;
this.docY=docY;
}
var C = new ob_all();
//-->
</script>