Horst Nogajski: Objekt gibt Werte zu Screen, Win, Doc. aber Fehler im IE

Beitrag lesen

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>