Tag Struppi.
Hm, ehrlich? Dann nimm mir bitte die Tomaten von den Augen :-)
Einfach:
<meta http-equiv="Content-Script-Type" content="text/javascript">
in den Header.
Aha, das kannte ich noch nicht.
Das ganze hat aber lediglich für den IE eine kleine Relevanz, da dieser auch Jscript ausführen kann und in Eventhandlern läßt sich dieses ja nicht wie in einem Skriptblock mit type unterscheiden.
Ich verstehe aber immer noch nicht, was das bringen soll. Dass der vorliegende Code nur im IE und im Opera läuft, liegt schlicht daran, dass der Firefox document.all zwar stillschweigend unterstützt, eine Objektabfrage jedoch immer false liefert. Das Ergebnis sieht man, wenn man den Code gescheit debuggt:
var n = (document.layers) ? 1:0;
var ie = (document.all) ? 1:0;
alert("Netscape: "+n+"\nIE: "+ie); // zweimal "0" und damit false im Firefox
var browser=((n || ie) && parseInt(navigator.appVersion)>=4);
alert(browser); // false && true bleibt false
Damit wird onclick zwar folgende Funktion ausgeführt, die aber wegen o.g. Initialisierung ohne Wirkung bleibt, wie ein kleiner von mir angefügter else-Zweig zeigt.
function menu(num) {
if(browser) {
// blabla
}
else {
alert("Oha, ein Gecko!");
}
}
Daran ändert auch die Meta-Angabe, die mir nicht bekannt war, nichts, das Problem liegt ganz woanders. Insofern gebe ich Christoph Recht, mit validem HTML hat das Problem nicht im Entferntesten zu tun.
Siechfred