Achim: eval()

Hallo!

Unter http://www.aaj.de/script.txt findet sich das Script, um das es in diesem Beitrag geht. Weil es etwas länger ist, wollte ich es hier nicht posten...

Gibt es eine Möglichkeit, die Funktion eval() zu umgehen? Sie taucht ja an zwei Stellen auf. Hintergrund ist der, dass dies eine kleine Spielerei ist, die einige eBay-Mitglieder auf ihren Seiten eingesetzt haben (hatten). Jedoch wird die Funktion eval() seit kurzem von eBay nicht mehr angenommen (d.h. "zensiert"), sodass das Script nicht mehr lauffähig ist...

Wäre toll, wenn Ihr mir/uns helfen könntet...

Achim

  1. Hallo!

    Unter http://www.aaj.de/script.txt findet sich das Script, um das es in diesem Beitrag geht. Weil es etwas länger ist, wollte ich es hier nicht posten...

    Gibt es eine Möglichkeit, die Funktion eval() zu umgehen? Sie taucht ja an zwei Stellen auf. Hintergrund ist der, dass dies eine kleine Spielerei ist, die einige eBay-Mitglieder auf ihren Seiten eingesetzt haben (hatten). Jedoch wird die Funktion eval() seit kurzem von eBay nicht mehr angenommen (d.h. "zensiert"), sodass das Script nicht mehr lauffähig ist...

    Wäre toll, wenn Ihr mir/uns helfen könntet...

    eval ist evil und in der Regel nicht nötig.

    in deinem Beispiel natürlich auch nicht:

    if (isNetscape) {
            this.obj = eval("document.dot" + i);
        } else {
            this.obj = eval("dot" + i + ".style");
        }

    Das ist eh unsauber dieses 'isNetcape' beruht darauf das der appName String Netscape enthält, was an dieser Stelle Unsinn ist. Warum prüfst du nicht auf das was du brauchst?

    var obj = document['dot' + i]; // Ist auch für den IE besser.

    if(typeof obj.style == 'undefined') this.obj = obj;
    else this.obj = obj.style;

    Netscape 7 kennt nämlich style.

    Struppi.

    1. Hallo!

      Danke erstmal!

      Ich habe diese Zeilen

      if (isNetscape) {
              this.obj = eval("document.dot" + i);
          } else {
              this.obj = eval("dot" + i + ".style");
          }

      durch die von Dir genannten ersetzt:

      var obj = document['dot' + i]; // Ist auch für den IE besser.

      if(typeof obj.style == 'undefined') this.obj = obj;
      else this.obj = obj.style;

      Leider kriege ich die Fehlermeldung, dass 'undefined' kein Objekt ist. Und das Script läuft nicht...

      Achim

      1. Hallo!

        Danke erstmal!

        Ich habe diese Zeilen

        if (isNetscape) {
                this.obj = eval("document.dot" + i);
            } else {
                this.obj = eval("dot" + i + ".style");
            }

        durch die von Dir genannten ersetzt:

        var obj = document['dot' + i]; // Ist auch für den IE besser.

        if(typeof obj.style == 'undefined') this.obj = obj;
        else this.obj = obj.style;

        Leider kriege ich die Fehlermeldung, dass 'undefined' kein Objekt ist. Und das Script läuft nicht...

        Das ist ja ne Klasse Fehlermeldung. Welches undefined? welche Zeile?

        was sagt alert(obj)?

        1. Das ist ja ne Klasse Fehlermeldung. Welches undefined? welche Zeile?

          was sagt alert(obj)?

          Zeile 87...

          Und bei dieser Anordnung:

          var obj = document['dot' + i]; // Ist auch für den IE besser.
          alert (obj);
          if(typeof obj.style == 'undefined') this.obj = obj;
          else this.obj = obj.style;

          gibt alert(obj) ebenfalls "undefined" aus...

          1. Das ist ja ne Klasse Fehlermeldung. Welches undefined? welche Zeile?

            was sagt alert(obj)?

            Zeile 87...

            Und bei dieser Anordnung:

            var obj = document['dot' + i]; // Ist auch für den IE besser.
            alert (obj);
            if(typeof obj.style == 'undefined') this.obj = obj;
            else this.obj = obj.style;

            gibt alert(obj) ebenfalls "undefined" aus...

            und mit eval hat's funktioniert?????

            var obj = eval(document.dot' + i);

            Ich seh nämlich grad das du ja layer benutzt, dann musst du es so machen:

            var id = 'dot' + i;

            if(document.getElementById) this.obj = document.getElementById(id).style;
            else if(document.layers) this.obj = document.layers[id];
            else if(document.all) this.obj = document.all[id].style;

            Struppi.

  2. gruss Achim

    Gibt es eine Möglichkeit, die Funktion eval() zu umgehen? ...

    folgt hier:

    function dot(i) {
     this.X = Xpos;
     this.Y = Ypos;
     this.dx = 0;
     this.dy = 0;
     if (document.getElementsByTagName) {
      this.obj = document.getElementsByTagName("div")["dot"+i].style;
     } else if (document.all) {
      this.obj = document.all.tags("div")["dot"+i].style;
     } else if (document.layers) {
      this.obj = document.layers["dot"+i];
     }
    }

    oder aber (nicht ganz sauber bei der definition von funktionen):

    var dot = null;

    if (document.getElementsByTagName) {
     dot = function(i) {
      this.obj = document.getElementsByTagName("div")["dot"+i].style;
     }
    } else if (document.all) {
     dot = function(i) {
      this.obj = document.all.tags("div")["dot"+i].style;
     }
    } else if (document.layers) {
     dot = function(i) {
      this.obj = document.layers["dot"+i];
     }
    }

    objektreferenz zu document:
    http://selfhtml.teamone.de/javascript/objekte/document.htm

    methoden von document:

    getElementsByTagName:
     http://selfhtml.teamone.de/javascript/objekte/document.htm#get_elements_by_tag_name

    all:
     http://selfhtml.teamone.de/javascript/objekte/all.htm#ansprechen

    layers:
     http://selfhtml.teamone.de/javascript/objekte/layers.htm

    Wäre toll, wenn Ihr mir/uns helfen könntet...
    Achim

    by(t)e by(t)e - peterS. - pseliger@gmx.net

    1. DANKE!

      So geht's...

      Achim

    2. hallo again Achim,

      bitte entschuldige meinen schnellschuss - hier noch ein

      nachtrag:

      natuerlich muss der konstruktor "dot" im  letztgebannten
         beispiel dem neuen dot-objekt auch noch die anderen eigen-
         schaften mit auf den weg geben;
         ausserdem fehlen dem div-tags in Deinem beispiel die name-
         attribute, ohne die der netcape 4.x "stumm" bleiben wird;

      oder aber (nicht ganz sauber bei der definition von funktionen):

      var dot = null;

      if (document.getElementsByTagName) {
       dot = function(i) {

      this.X = Xpos;
           this.Y = Ypos;
           this.dx = 0;
           this.dy = 0;

      this.obj = document.getElementsByTagName("div")["dot"+i].style;
       }
      } else if (document.all) {
       dot = function(i) {

      this.X = Xpos;
           this.Y = Ypos;
           this.dx = 0;
           this.dy = 0;

      this.obj = document.all.tags("div")["dot"+i].style;
       }
      } else if (document.layers) {
       dot = function(i) {

      this.X = Xpos;
           this.Y = Ypos;
           this.dx = 0;
           this.dy = 0;

      this.obj = document.layers["dot"+i];
       }
      }

      by(t)e by(t)e - peterS. - pseliger@gmx.net