Hans35: Browserverzweigung

Hallo!

Ich möchte bei mein Homepage mittels JavaScript etwas "verschönern" und komme (natürlich) immer wieder damit in Konflikt, dass nicht jeder Browser alles kann. Ich habe daher folgendes Konzept: Erst mal für "alle" Browser ein HTLM-Programm und dann eine besondere Fassung für den jeweiligen Browser.
Im ersten Schritt will ich nur den IE bedienen und daher über die Abfrage von "document.all" im HTML-Dokument in die IE-Version verzweigen.

1. Versuch: in das body-Tag des des HTML-Programnms kommt eine entsprechende Abfrage bei "onLoad":

<body onload='if(document.all)document.location.href="./IE-Version.htm"' bgcolor=... usw.>

Das funktioniert leider nicht: Der IE führt erst die rufende Seite vollständig aus, bevor er die href-Anweisung ausführt, das Dokument wird also zweimal nacheinander in den beiden Fassungen geladen.

2. Versuch: den Aufruf in ein Java-Script vor das <body>-Tag schreiben:

...</head>
<script language="JavaScript">
<!--
if(document.all)document.location.href="./Bildergalerie-1.4.htm"
-->
</script>
<body> ...

Das funktioniert, aber ich habe noch folgende Schwierigkeiten:

a) Die Verwendung der "Zurück"-Taste des Browsers geht nicht mehr. Denn auch wenn ich sie zweimal sehr schnell nacheinander anklicke: der IE ist schneller und hat zwischen den beiden Klicks wieder vorwärts geschaltet. Gibts dazu eine elegantere Lösung als zwangsweise mit setTimeout?
b) Ich habe auch LINUX SuSE 7.3 und da gibt's als Browser den Konqueror. Der kennt "document.all" und läd daher die IE-Fassung und führt sie auch richtig aus. Er läd aber erst, nachdem er den HTML-Code der rufenden Seite ausgeführt hat. Er verhält sich also bei diesem "2. Versuch" genau so wie der IE im "1. Versuch". Das soll natürlich nicht sein, auch wenn der Konqueror prozentual wohl nur wenig Anteil an meinen HP-Betrachtern haben wird. (Die LINUX-User werden in jedem Fall die kritischren Betrachter sein!)

Die einfachste Lösung (zu b), die document.all-Abfrage in einen besonderen HTML-Datensatz zu packen, geht nicht, weil dann Browser ohne eingschaltetes JavaScript nicht weiterfinden.

Wie kommt es überhaupt dazu, dass die document.all-Abfrage nicht sofort ausgeführt wird? Von anderen Programmiersprachen bin ich es gewohnt, dass die Befehle immer in der Reihenfolge abgearbeitet werden, in der sie da stehen.

An sich ist klar: Die Reihenfolge im HTML-Code bezeichnet erst mal nur den Ort, _wo_ die Dokumentteile auf der ferigen Seite stehen; die zeitliche Reihenfolge der Aktionen, um das zu bewerkstellen, "überlegt" sich der Browser "selbst". Aber nach welchen Kriterien? Gibts da einfach zu verstehende Prinzipien? Gibt's vielleicht sogar die Möglichkeit, auf die Bearbeitungsreihenfolge unmittelbar Einfluss zu nehmen?

Hans35

  1. Moin,moin,

    such' mal bei Bratta.com ein bischen rum. Er hat eine Reihe von Scripten im Angebot und alle (!!!) haben eine recht gute Browsererkennung enthalten.
    Eines der neueren Menüs funkst auch im Opera, Netscape und IE - ist also ein gutes Anschauunsmuster.

    Bye Ford