ich hab das pulldown-menue meiner homepage ( www.headstrong.de ) nun komplett ueberarbeitet, damit es moeglichst browserkompatibel ist. leider ist die programmierung nicht sehr sauber, deshalb frage ich mal euch "profis", welche dinge man noch aendern sollte.
probleme:
1. netscape 6 ist entweder sehr instabil oder wird durch die seitenprogrammierung instabil; nachdem man das menue benutzt hat kann man z.b. die seite nicht mehr reloaden oder den browser neustarten - nichtmal der taskmanager von win2k kriegt ihn noch aus dem speicher (zugriff verweigert).
2. netscape 4 faellt von vornherein flach, weil er die DIVs ohne wirklich absolute positionierung nicht richtig anordnet. das wurde mir zu bloed, deshalb werden in browsercheck() dann absolute groessen verwendet - das ist ein punkt, den ich gerne aendern wuerde; absolute groessenvergabe mit pixeln koennten doch bei unterschiedlicher aufloesung zu verschobener darstellung führen, oder?
wie kann man das hier besser loesen? am allerbesten waere natuerlich eine loesung, die das auf- und zuklappen bei NN4 ermoeglichen wuerde, aber so wie ich sehe ist das unmoeglich...
hier die wesentlichen scriptbestandteile :
<script type="text/javascript" language="JavaScript">
<!--
//browsercheck from www.bratta.com
function checkBrowser(){
this.ver=navigator.appVersion
this.dom=document.getElementById?1:0
this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
this.ie4=(document.all && !this.dom)?1:0;
this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
this.ns4=(document.layers && !this.dom)?1:0;
this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)
return this
}
bw=new checkBrowser()
function makeChangeTextObj(obj) {
this.css=bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?document.layers[obj]:0;
}
var running=0;
// NN4 does not work - open all menus :(
function browsercheck() {
if (bw.ns4) {
document.layers['datac1'].left=20;
document.layers['datac2'].left=20;
document.layers['datac3'].left=20;
document.layers['datac4'].left=20;
document.layers['datac1'].visibility='show';
document.layers['datac2'].visibility='show';
document.layers['datac3'].visibility='show';
document.layers['datac4'].visibility='show';
document.layers['menuc2'].top=62;
document.layers['menuc3'].top=124;
document.layers['menuc4'].top=175;
document.layers['datac1'].top=244;
document.layers['datac2'].top=353;
document.layers['datac3'].top=462;
document.layers['datac4'].top=560;
}
}
// for NN6/IE/OPERA :
function pop (objid) {
if ((running==1)||(bw.ns4)) return;
running=1;
oobject1=new makeChangeTextObj('datac1');
oobject2=new makeChangeTextObj('datac2');
oobject3=new makeChangeTextObj('datac3');
oobject4=new makeChangeTextObj('datac4');
omenu1=new makeChangeTextObj('menuc1');
omenu2=new makeChangeTextObj('menuc2');
omenu3=new makeChangeTextObj('menuc3');
omenu4=new makeChangeTextObj('menuc4');
oobject=new makeChangeTextObj(objid);
if (oobject.css.visibility=='visible') {
oobject.css.visibility='hidden';
omenu2.css.top=0;
omenu3.css.top=0;
omenu4.css.top=0;
} else {
menuheight = oobject.css.height;
if (objid!='datac4') omenu4.css.top=menuheight; else omenu4.css.top=0;
if ( (objid=='datac1')||(objid=='datac2') ) {
omenu3.css.top=menuheight;
if (objid=='datac1') omenu2.css.top=menuheight; else omenu2.css.top=0;
} else {
omenu3.css.top=0;
omenu2.css.top=0;
}
oobject.css.visibility='visible';
if (objid != 'datac1') oobject1.css.visibility='hidden';
if (objid != 'datac2') oobject2.css.visibility='hidden';
if (objid != 'datac3') oobject3.css.visibility='hidden';
if (objid != 'datac4') oobject4.css.visibility='hidden';
}
window.setTimeout("running=0",1); // 1 sec delay needed to prevent immediate "open-close"
}
//-->
</script>
[... hier folgt der body ...]
ich verwende zwei verschiedene DIV-zuweisungen:
<DIV id="menuc1" style="position:relative;">
für die ueberschriften (anklickbar) und
<DIV id="datac1" style="position:absolute;visibility:hidden;height:80px;left:10px;">
fuer die ausklappbaren flaechen (diesen muss ich ja absolute "height" zuweisen, sonst kann ich im script nicht auf die groesse zugreifen, oder?).
ich hoffe auf jeglich tipps! danke!!
-moritz