eval()
Achim
- javascript
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
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.
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
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)?
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...
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.
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
DANKE!
So geht's...
Achim
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