Martin: Browsererkennung vereinfachen

Hallo, ich möchte gern am Anfang des Programms einmalig die
Browserspezifischen Syntax zum ansprechen der Layer in die Variablen
posLeft und posTop schreiben, damit ich einfach nur noch mit den Variablen
operieren kann ohne die verschiedenen Browsertypen weiter beachten
zu müssen. So klappts leider nicht.
Danke

if (NS4)
    {
    posLeft = parent.mainFrame.document.Buehli.document.Marke.left;
    posTop = parent.mainFrame.document.Buehli.document.Marke.top;
    }
    else if (IE4)
    {
        posLeft = parent.mainFrame.document.all.Marke.style.left;
    posTop = parent.mainFrame.document.all.Marke.style.top;
     }
    else
    {
    posLeft = parent.mainFrame.document.getElementById("Marke").style.left;
    posTop = parent.mainFrame.document.getElementById("Marke").style.top;
    }
.
.
function Position()
               {
               posLeft  = 200;
               posTop  = 300;
               }

  1. MoiN!

    Mach doch eine Funktion draus:

    function setpos(posX,posY)
    {

    if (NS4)
        {

    parent.mainFrame.document.Buehli.document.Marke.left = posX;
             parent.mainFrame.document.Buehli.document.Marke.top = posY;

    }
        else if (IE4)
        {

    parent.mainFrame.document.all.Marke.style.left = posX+'px';
             parent.mainFrame.document.all.Marke.style.top = posY+'px';
             //Ohne die px wird dir der IE 5 Mac was husten. :)

    }
        else
        {

    parent.mainFrame.document.getElementById("Marke").style.left = posX;
             parent.mainFrame.document.getElementById("Marke").style.top= posY;

    }

    }

    .
    .
    function Position()
                   {

    setpos(200,300);

    }

    Ansonsten vermute ich, daß du mit deiner Wertzuweisung keine Referenz auf ein Objekt erzeugst, weil .style.left einfach kein Objekt ist, sondern ein String.

    Wenn du z.B. sowas machst:
    layer = parent.mainFrame.document.getElementById("Marke");

    dann solltest du relativ einfach mit layer.style.left Zugriff kriegen - ist dann eben nicht browserunabhängig. Und wegen der Notwendigkeit, bei manchen Zuweisungen "px" hintendranzuhängen, ist die Funktion dafür besser geeignet.

    - Sven Rautenberg

  2. Hallo, ich möchte gern am Anfang des Programms einmalig die
    Browserspezifischen Syntax zum ansprechen der Layer in die Variablen
    posLeft und posTop schreiben, damit ich einfach nur noch mit den Variablen
    operieren kann ohne die verschiedenen Browsertypen weiter beachten
    zu müssen. So klappts leider nicht.
    Danke

    function Position()
                   {
                   posLeft  = 200;
                   posTop  = 300;
                   }

    Also ich würde es zunächst mal so probieren:

    function Position()
     {
     eval(posLeft  = 200);
     eval(posTop  = 300);
     }

    Könnte funktionieren. Möchte aber auf Anhieb keine Garantie dafür übernehmen.

    Ciao

    W. Pichler

    1. MoiN!

      Also ich würde es zunächst mal so probieren:

      function Position()
      {
      eval(posLeft  = 200);
      eval(posTop  = 300);
      }

      Könnte funktionieren. Möchte aber auf Anhieb keine Garantie dafür übernehmen.

      Warum hast du es dann nicht ausprobiert?

      Deine Lösung macht genau das, was die Funktion vorher auch schon macht. Mit dem Unterschied, daß hier eine ziemlich mächtige und aufwendige Funktion eingesetzt wird. Wenn posLeft keine Referenz auf das passende DOM-Objekt ist, sondern nur eine einfache Variable, wird sich nichts an der Nichtfunktion ändern.

      Und wie ein kurzer Text in Opera ergibt, erzeugt die Zuweisung

      posLeft = parent.mainFrame.document.getElementById("Marke").style.left;

      eine Variable mit einem Zahlenwert, keine Objektreferenz. (Einfach mal mit alert(posLeft) anzeigen lassen). Also funktionierts nicht.

      Statt die schon bekannte Grafik einzubinden, verweise ich einfach mal auf die FAQ: </faq/#Q-09d>

      - Sven Rautenberg

      1. MoiN!

        Also ich würde es zunächst mal so probieren:

        function Position()
        {
        eval(posLeft  = 200);
        eval(posTop  = 300);
        }

        Statt die schon bekannte Grafik einzubinden, verweise ich einfach mal auf die FAQ: </faq/#Q-09d>

        Jawohl Herr Zensor. Sie haben in diesem Fall Recht. Wie häufig müssen Sie eigentlich die schon bekannte Grafik einbinden oder auf die FAQ verweisen, wenn Sie jedes gepostete Wort auf die Goldwaage legen?
        Aber so wird das ja nicht gehandhabt!

        Ciao

        W. Pichler

        1. Re-MoiN!

          Jawohl Herr Zensor. Sie haben in diesem Fall Recht. Wie häufig müssen Sie eigentlich die schon bekannte Grafik einbinden oder auf die FAQ verweisen, wenn Sie jedes gepostete Wort auf die Goldwaage legen?

          Ich zensiere nicht! Ich korrigiere!

          Und mir fällt auf, daß du besonders viel falsche Tipps gibst. Insofern habe ich dich sozusagen gerade "im Auge" und werde nicht müde werden, hinter dir aufzuräumen.

          Was ich damit erreichen will: Die Qualität des Forums steigern, indem ich Leute, die Fehler als Lösung verkaufen, darauf hinweise.

          Es ist wirklich nicht zuviel verlangt, wenn jemand, der hier eine Antwort gibt, vorher den Code, den er postet, kurz auf Funktionsfähigkeit prüft, und nur dann antwortet, wenn die Lösung funktioniert.

          Was die Goldwaage angeht: Javascript und HTML legen auch jeden Befehl und jeden Tag auf die Goldwaage. Winzige Abweichungen entscheiden über Funktionsfähigkeit oder Scheitern. Und Anfänger erkennen diese kleinen Flüchtigkeitsfehler nicht, sondern ärgern sich, daß die Antwort nicht funktioniert. Da ist es nur gerechtfertigt, bei den Antworten genau aufzupassen.

          Ich weiß, daß ich mich damit auf ein ziemlich hohes Ross setze. Du darfst gerne im Hintergrund lauern und mich zu gegebener Zeit herunterstoßen, wenn dir das gefällt.

          - Sven Rautenberg

          1. Re-MoiN!

            Jawohl Herr Zensor. Sie haben in diesem Fall Recht. Wie häufig müssen Sie eigentlich die schon bekannte Grafik einbinden oder auf die FAQ verweisen, wenn Sie jedes gepostete Wort auf die Goldwaage legen?

            Ich zensiere nicht! Ich korrigiere!

            Und mir fällt auf, daß du besonders viel falsche Tipps gibst. Insofern habe ich dich sozusagen gerade "im Auge" und werde nicht müde werden, hinter dir aufzuräumen.

            Glaube ich nicht, dass ich falsche Tips gebe. Bin nur meist zu faul, alles genau auszuformulieren. Wenn ich für meinen Tip nicht dafür garantiere, sage ich das.

            Was ich damit erreichen will: Die Qualität des Forums steigern, indem ich Leute, die Fehler als Lösung verkaufen, darauf hinweise.

            Ist ja ein hehres Ziel.

            Es ist wirklich nicht zuviel verlangt, wenn jemand, der hier eine Antwort gibt, vorher den Code, den er postet, kurz auf Funktionsfähigkeit prüft, und nur dann antwortet, wenn die Lösung funktioniert.

            Geht gar nicht, weil hier sehr häufig nur Teile von scripts gepostet werden, von denen du die anderen Teile (seis HTML oder CSS) nicht kennen kannst. Es kommt also häufig darauf an, ob du den Code in dem Zusammenhang interpretierst, in dem er auch vorkommt. Und ob du das richtige erwischt, ist z.t. Erfahrung z.t. Glück. (Von seitenlangen, meist WYSIWYG-generierten Codes mal abgesehen, die wirklich keiner durchgeht.)

            Ich weiß, daß ich mich damit auf ein ziemlich hohes Ross setze. Du darfst gerne im Hintergrund lauern und mich zu gegebener Zeit herunterstoßen, wenn dir das gefällt.

            Keine Zeit und Lust dazu. Aber ab und an wirds schon wieder einen nicht ganz korrekten Tip geben, den du dann korrigieren wirst. (Aber bitte nicht mit der Grafik, auf die bin ich nämlich allergisch, wie du wahrscheinlich bemerkt hast.)

            Ciao

            W. Pichler