Browserkompatibilität für NS4
Gunnar
- javascript
Hi all,
beim Versuch einen Script weitgehend browserkompatibel zu kreiren bin ich nun völlig verwirrt. Nachdem
anfangs nur für NS4 (beim mir ist 4.78 im einsatz) lief, ist das der browser, auf dem es nun nicht mehr läuft.
Wie es scheint fliegt das Script bereits beim ersten aufruf der folgenden hide-methode raus.
Zum Verständnis, der style sieht so aus:
#sm1
{
position: absolute;
width=200;
left: 20;
z-index: 1;
visibility:hidden;
}
der container lautet:
<div id=sm1 name="sm1">
<IMG SRC="l_gold.gif" border=0 width=10 height=10 alt="dot"><a href="welcomed.html" target="Haupt">Willkommen</a>
</div>
nach demselben muster, natürlich mit anderen inhalten gibt es noch elf derartige container.
die browsererkennung ist entsprechend den tipps im forum so realisiert:
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
ns6 = (document.getElementById)? true:false
entsprechdnd sieht das hide so aus:
function hide(nam)
{
if (ns4) document.layers[nam].visibility = "hide";
else if (ns6) document.getElementById(nam).style.visibility = "hidden";
else if (ie4) document.all[nam].style.visibility = "hidden"
}
nach diesem muster gibt noch einige andere funktionen (show, höhe des containers bestimmen usw.)
und der aufruf erfolgt auf diese weise
function showmain()
{
/* erst alle untermenüs verstecken */
for (i=1; i <= nhmenu; i++)
{
nam = "sm".concat(i.toString(10));
hide (nam);
}
...
nhmenu beträgt elf. ein alert vor dem aufruf von hide hat gezeigt, das name (variable nam) und nummer (nhmenu )richtig
erkannt sind, die schleife unter NS4 allerdings nur einmal aufgerufen wird,
dann schweigt alles. Unter NS 6.2 und IE 6 scheint alles richtig abzulaufen.
Vielleicht bin ich ja nur betriebsblind geworden, aber kann mir jemand sagen wo ich den fehler mache?
Salu
hast du das auch online, oder so??
Hi Gunnar,
das ist eigentlich nicht "meine Baustelle", aber so viel Mühe bei der Beschreibung Deines Problems möchte ich gerne zu honorieren versuchen.
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
ns6 = (document.getElementById)? true:false
das ist natürlich stark vereinfachend, sollte für Deinen Fall aber reichen - solange Deine if-else-Struktur wie beschrieben abläuft.
(Wenn Du aber diese Abhängigkeit hast, dann kannst Du aich gleich die entsprechenden Abfragen in "hide()" einfügen - der Sinn der Sache wäre ja, daß Deine drei Variablen universell verwendbar wären, und das sind sie nicht - was von diesen ist Opera?)
nam = "sm".concat(i.toString(10));
Interessante Methode, das. Ich mußte dreimal hinsehen, bis ich verstanden habe, was Du da treibst. Aber Du scheinst genau das ja erfolgreich überprüft zu haben ...
nhmenu beträgt elf. ein alert vor dem aufruf von hide hat gezeigt,
das name (variable nam) und nummer (nhmenu )richtig erkannt sind,
die schleife unter NS4 allerdings nur einmal aufgerufen wird,
dann schweigt alles.
Das klingt nach einem Laufzeitfehler Deines JavaScript-Codes in Netscape 4 (es sei denn, Du hast irgendwo Seiteneffekte, welche den Wert von "nhmenu" verändern).
Was wird angezeigt, wenn Du in die URL-Zeile von Netscape4 "javascript:" eingibst?
Unter NS 6.2 und IE 6 scheint alles richtig abzulaufen.
Vielleicht bin ich ja nur betriebsblind geworden, aber kann mir
jemand sagen wo ich den fehler mache?
Ich kann Dich nur auf die Möglichkeit hinweisen, JavaScript-Fehler in Netscape 4 anzuzeigen.
Anscheinend überforderst Du die "Kröte" mit irgendwas, das mehr als JavaScript 1.2 verlangt oder was auch immer ... das würde Dir aber die JavaScript-Konsole zeigen.
Viele Grüße
Michael
P.S.: Online-Stellen der Seite wäre nicht schlecht gewesen.