Cheatah: Version am Objekt erkennen

Hi,

für meinen Counter habe ich die verfügbare JavaScript-Version bisher wie folgt herausgefunden:

<script language=JavaScript>
  js=1.0;
</script>
<script language=JavaScript1.1>
  js=1.1;
</script>
<script language=JavaScript1.2>
  js=1.2;
</script>
<script language=JavaScript1.3>
  js=1.3;
</script>

In den jeweiligen Blöcken habe ich zusätzlich noch bestimmte Eigenschaften erfragt, z.B. Bildschirmgröße, Java usw.
Das möchte ich jetzt zusammenfassen, indem ich z.B. schreibe:
js=1.0;
if (document.images) js=1.1;
if (window.screen) js=1.2;

Jetzt meine Fragen:

  • Ist da grundsätzlich etwas gegen einzuwenden?
  • Welche Objekte eignen sich am besten für die jeweiligen Versionen?
  • Woran zum (zensiert) erkennt man v1.3?

Zu erwähnen ist vielleicht noch, daß ich abhängig von document.layers bzw. document.all die verfügbare Clientarea ermittele, ggf. kann die Abfrage also dort "nebenher" laufen. Der Code soll natürlich optimiert sein, also sowohl so kurz wie möglich als auch fehlerfrei auf allen Systemen :-)

Ach so, eins noch nebenbei: Eine Abfrage lautet
if (navigator.javaEnabled()) { java=1; }
Muß ich da noch ein "if (navigator.javaEnabled)" (ohne Klammern des Funktionsaufrufes) voranstellen, um Fehler bei JS-1.0-fähigen Browsern zu vermeiden, oder geht es auch so?

Danke,

Cheatah

  1. Hallo Cheatah

    Jetzt meine Fragen:

    • Ist da grundsätzlich etwas gegen einzuwenden?
    • Welche Objekte eignen sich am besten für die jeweiligen Versionen?
    • Woran zum (zensiert) erkennt man v1.3?

    1. meines Erachtens nicht. Du solltest dir halt bewusst sein, dass <script language="JavaScript1.x"> dem Browser die Entscheidung ueberlaesst, ob er sich an den Inhalt wagt, waehrend if(document.images) nur dieses Objekt abfragt, was aber nicht ausschliesst, dass der Browser JavaScript 1.1 (in diesem Fall) unvollstaendig implementiert hat und andere 1.1-Befehle nicht kennt.

    2. Schwer zu sagen. Klassisch sind:
    1.1 = if(document.images)
    1.2 = if(screen)

    3. Hmm, hab mich mit 1.3 noch nicht so beschaeftigt. Gibt es da ueberhaupt ein ganz neues JS-Objekt?

    viele Gruesse
      Stefan Muenz

    1. Hi Stefan,

      • Ist da grundsätzlich etwas gegen einzuwenden?
      1. meines Erachtens nicht. Du solltest dir halt bewusst sein, dass <script language="JavaScript1.x"> dem Browser die Entscheidung ueberlaesst, ob er sich an den Inhalt wagt, waehrend if(document.images) nur dieses Objekt abfragt, was aber nicht ausschliesst, dass der Browser JavaScript 1.1 (in diesem Fall) unvollstaendig implementiert hat und andere 1.1-Befehle nicht kennt.

      gut, dann fühle ich mich bestätigt :-) Ich will JavaScript-Code (falls möglich natürlich) sowieso ausführen, deswegen wollte ich halt umformen. Zusätzlich werden so Fehlinformationen verhindert (MSIE 3.0wasauchimmer meldet 1.1, wo keines ist).

      • Welche Objekte eignen sich am besten für die jeweiligen Versionen?
      1. Schwer zu sagen. Klassisch sind:
        1.1 = if(document.images)
        1.2 = if(screen)

      Letzteres bringt glaube ich eine Fehlermeldung ("if (window.screen)" sollte es heißen), aber in diese Richtung liefen auch meine Vermutungen. 1.2 kann ich aber genauso mit document.layers bzw. document.all erkennen, oder? Da ich diese ohnehin abfrage, bietet sich das jedenfalls an - falls nichts anderes dagegen spricht.

      • Woran zum (zensiert) erkennt man v1.3?
      1. Hmm, hab mich mit 1.3 noch nicht so beschaeftigt. Gibt es da ueberhaupt ein ganz neues JS-Objekt?

      Keine Ahnung, ich habe nur SelfHTML danach durchsucht :-)
      Mal sehen, ob ich auf den Netscape-Seiten etwas finde. Ist mein erster Versuch... aber wenn ich etwas finde, teile ich es hier mit!

      Einstweilen vielen Dank für die Antwort,

      Cheatah

      1. Hi Stefan,

        • Woran zum (zensiert) erkennt man v1.3?
        1. Hmm, hab mich mit 1.3 noch nicht so beschaeftigt. Gibt es da ueberhaupt ein ganz neues JS-Objekt?
          Mal sehen, ob ich auf den Netscape-Seiten etwas finde. Ist mein erster Versuch... aber wenn ich etwas finde, teile ich es hier mit!

        ich bin fündig geworden: Auf http://developer.netscape.com:80/docs/manuals/js/client/jsguide/index.htm (genauer http://developer.netscape.com:80/docs/manuals/js/client/jsguide/whatsnew.htm, ist aber die Startseite) steht, was neu in v1.3 ist. Zusammenfassung:

        • ECMA (habe ich schon gelegentlich gehört, weiß aber nichts mit anzufangen).
        • Unicode support.
        • Operatoren === (ja, _drei_ Gleichheitszeichen) und !==, um Variablen nicht nur inhaltlich, sondern auch vom Typ her zu vergleichen.
        • == und != wurden (vermutlich deswegen) angepaßt.
        • "if (x=y)" erzeugt jetzt Laufzeitfehler.
        • "undefined", "null" und "false" werden offenbar jetzt als "true" gewertet?!
        • JavaScript-Konsole.

        Keine neuen Objekte... *schnief* :-( Aber vielleicht findet ja jemand anders in den Tiefen der Developer-Seiten noch etwas, was ich übersehen habe? Ich gebe ja zu, daß ich nicht alles von oben verstanden habe... Christine, liest Du mit?

        Cheatah