femjava: switch-anweisungen funktionieren nicht korrekt

hallo javascriptler
langsam verzweifle ich...seit tagen versuche ich, unten angehängtes script (t2) anzupassen. das script soll plattformen (mac, pc) und browser (msie, ns) bzw. deren versionen (4, 5, 6 und 4, 5) abfragen und die passende seite entsprechend ausgeben.
seltsamerweise switcht beim pc/mozilla das script bis zu mac_ns_5.html; bei pc/msie 6 gibt das script die seite mac_ns_4.html und auf dem mac geschieht gar nix.

bitte, bitte, wer kann helfen?
danke jetzt schon!
femjava

ps: (t1), auch hier angehängt, funktioniert auch auf dem mac, ist aber leider zu undifferenziert.

---------------------------------
script t2

<script language="javascript">

var browser;

platform = navigator.platform;
browser = navigator.appName;
version = navigator.appVersion.substring(0,1);

switch (platform)
{
case "Win32":
  switch(browser)
  {
   case "Microsoft Internet Explorer" :
     switch(version)
  {
     case "4" : window.location.href="pc_msie_4.html";
  break;
     case "5" : window.location.href="pc_msie_5.html";
  break;
  case "6" : window.location.href="pc_msie_6.html";
  break;
     }
 case "Netscape":
     switch(version)
  {
     case "4" : window.location.href="pc_ns_4.html";
  break;
     case "5" : window.location.href="pc_ns_5.html";
  break;
  case "6" : window.location.href="pc_ns_6.html";
  break;
     }
  }
case "Mac":
  switch(browser)
 {
   case "Microsoft Internet Explorer":
     switch(version)
  {
     case "4" : window.location.href="mac_msie_4.html";
  break;
     case "5" : window.location.href="mac_msie_5.html";
  break;
     }
   case "Netscape":
     switch(version)
  {
    case "4" : window.location.href="mac_ns_4.html";
  break;
     case "5" : window.location.href="mac_ns_5.html";
  break;
     }
  // weitere Mac Browser
   }
//weitere Betriebssysteme
}
</script>

-------------------------------------------
script t1

<script language="JavaScript" type="text/javascript">
var browser;
browser=navigator.appName;
switch(browser) {
case "Microsoft Internet Explorer":
window.location="msie.html";
break;
case "Netscape":
window.location="ns.html";
break;
default:
alert("Leider haben Sie keinen passenden Browser f?r unsere Seiten!");
}
</script>

  1. Hiho :)!

    Es fehlen bei einigen Cases die break-Anweisung (z.B. am Ende von "Win32"). Wenn die weggelassen wird, werden auch alle nachfolgenden Cases ausgeführt.

    Gruß, jan

  2. Hi,

    das script soll plattformen (mac, pc) und browser (msie, ns) bzw. deren versionen (4, 5, 6 und 4, 5) abfragen und die passende seite entsprechend ausgeben.

    nachdem ich dies weiß: Nein, soll es nicht. Unabhängig von Deinem switch/case-Problem sind Browserweichen *nutzfrei* und allerhöchstens kontraproduktiv. Deine Seiten (wobei ich mich frage, warum Du Dir die Mühe einer n-fachen Ressourcengenerierung machst) sind _nicht_ für bestimmte Browser gestaltet, sondern für bestimmte _Fähigkeiten_. Frage also nach diesen und _nur_ nach diesen.

    <script language="javascript">

    ERROR: Required attribute "type" missing.

    platform = navigator.platform;

    Vergiss, ignoriere oder leugne die Existenz des navigator-Objektes. Es hat _niemals_ einen Nutzen für Dich. Frage nach der Existenz der von Dir benötigten Objekte oder Methoden.

    alert("Leider haben Sie keinen passenden Browser f?r unsere Seiten!");

    Die ist so ziemlich der größte Schwachsinn, der auf Internet-Seiten leider tatsächlich gefunden wird. Was machst Du eigentlich mit den Usern, die kein JavaScript angeschaltet haben können, dürfen oder wollen?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  3. hallo javascriptler
    langsam verzweifle ich...seit tagen versuche ich, unten angehängtes script (t2) anzupassen. das script soll plattformen (mac, pc) und browser (msie, ns) bzw. deren versionen (4, 5, 6 und 4, 5) abfragen und die passende seite entsprechend ausgeben.

    Sowas ist absolut unnötig, wenn es bei dir nötig sein soll ist mit Sicherheit irgendetwas an deinem HMTL/CSS kaputt.

    Es gibt einige situationen, wo es für ältere Browser besser ist, z.b. CSS zu verstecken (z.b. vor NC 4.x mit media="all")
    Sollte es sich aber um JS Code handeln ist es auf jeden Fall sinnvoller einfach zuprüfen, was der Browser kann, anstatt diese nichsagenden Strings auszuwerten:

    platform = navigator.platform;
    browser = navigator.appName;
    version = navigator.appVersion.substring(0,1);

    Die sagen wirklich nichts über die Fähigkeit des jeweiligen Browser aus.

    Besser ist es z.b. um Layerobjekte zu referenzieren:

    function getObjByName(name)
    {
    var obj;
    if(document.getElementByName) obj = document.getElementByName(name);
    else if(document.layers) obj = document.layers[name];
    else if(document.all) obj = document.all[name];
    return obj;
    }

    Damit kriegst du alle Browser, die dHTML können.

    switch (platform)
    {

    solche switch-case Blöcke können wesentlich eleganter Programmiert werden. Ich kenne diese vor allem von VB programmierern und da in erster Linie bei windows programmen, wo events abgearbeitet werden müssen. I.d.R. sind aber solche Blöcke eher kontraproduktiv den übersichtlich.

    Ich zeig mal was ich meine:

    case "Netscape":
         switch(version)
      {
         case "4" : window.location.href="pc_ns_4.html";
      break;
         case "5" : window.location.href="pc_ns_5.html";
      break;
      case "6" : window.location.href="pc_ns_6.html";

    das liesse sich prima in einen 2-Zeiler wandeln:

    if(browser == 'Netscape') url = 'pc_ns_' + version + '.html';
    window.location = url;

    Struppi.

    1. hallo struppi - hallo alle anderen arbeitenden!
      vielen herzlichen dank für deine antwort. vielleicht klappt es ja heute mit dem antworten... ich klicke auf die antwort eines forumschreibers auf meine anfrage, schreibe dann in das textfeld rein, sende es, aber es erscheint nicht!

      ich bin mir nicht sicher, ob ich deine antwort richtig verstanden habe:

      -----------------------------------

      case "Netscape":
           switch(version)
        {
           case "4" : window.location.href="pc_ns_4.html";
        break;
           case "5" : window.location.href="pc_ns_5.html";
        break;
        case "6" : window.location.href="pc_ns_6.html";

      das liesse sich prima in einen 2-Zeiler wandeln:

      if(browser == 'Netscape') url = 'pc_ns_' + version + '.html';
      window.location = url;
      ----------------------------------------

      meine Frage:

      müsste ich dieses if oben mit else erweitern?

        
        
      else(browser == 'Microsoft Internet Explorer') url = 'pc_msie_' + version + '.html';  
      window.location = url;  
        
      
      

      falls ja, wie mach ich dann noch die plattformabfrage? wie erweitere/ändere ich folgenden code, so dass er im stil von oben (if...) geschrieben ist:

        
        
      <script language="javascript">  
        
      var browser;  
        
      platform = navigator.platform;  
      browser = navigator.appName;  
      version = navigator.appVersion.substring(0,1);  
        
      switch (platform)  
      {  
      case "Win32":  
        switch(browser)  
        {  
         case "Microsoft Internet Explorer" :  
           switch(version)  
        {  
           case "4" : window.location.href="pc_msie_4.html";  
        break;  
           case "5" : window.location.href="pc_msie_5.html";  
        break;  
        case "6" : window.location.href="pc_msie_6.html";  
        break;  
           }  
       case "Netscape":  
           switch(version)  
        {  
           case "4" : window.location.href="pc_ns_4.html";  
        break;  
           case "5" : window.location.href="pc_ns_5.html";  
        break;  
        case "6" : window.location.href="pc_ns_6.html";  
        break;  
           }  
        }  
      case "Mac":  
        switch(browser)  
       {  
         case "Microsoft Internet Explorer":  
           switch(version)  
        {  
           case "4" : window.location.href="mac_msie_4.html";  
        break;  
           case "5" : window.location.href="mac_msie_5.html";  
        break;  
           }  
         case "Netscape":  
           switch(version)  
        {  
           case "4" : window.location.href="mac_ns_4.html";  
        break;  
           case "5" : window.location.href="mac_ns_5.html";  
        break;  
           }  
        // weitere Mac Browser  
         }  
      //weitere Betriebssysteme  
      }  
      </script>  
        
      
      

      herzlichen danke für deine/eure antwort
      femjava

      1. Hi,

        vielen herzlichen dank für deine antwort. vielleicht klappt es ja heute mit dem antworten... ich klicke auf die antwort eines forumschreibers auf meine anfrage, schreibe dann in das textfeld rein, sende es, aber es erscheint nicht!

        sondern?

        müsste ich dieses if oben mit else erweitern?

        Nein, Du sollst die Abfrage komplett umgestalten. Unter anderem, indem Du *vollständig* auf die Betrachtung des navigator-Objektes verzichtest.

        else(browser == 'Microsoft Internet Explorer')

        Es gibt keine else()-Funktion.

        falls ja, wie mach ich dann noch die plattformabfrage?

        Die machst Du gar nicht, weil sie für Dich nicht interessant ist. Ganz einfach.

        <script language="javascript">

        ERROR: Required attribute "type" missing.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes