Hallo,
Daraus folgere ich:
- eval ist immer vorhanden
- eval hängt am globalen Objekt, also an window
- deshalb lässt IE auch window.eval(...) zu, während er document.getElementById('xy').eval(...) nicht mag
Sehe ich auch so.
- da "code passed to the eval method is executed in the same context as the call to the eval method." sollte doch auch mein Aufruf das gewünschte Ergebnis liefern - siehe FF.
Vielleicht verstehst du den Begriff »context« falsch.
Ob ich (an derselben Stelle) eval() oder window.eval() schreibe, das hat keine Auswirkungen auf den Kontext. Der Kontext ist die Umgebung, in der ich das eine oder andere notiere. Entweder der Kontext ist global, außerhalb jeder Funktion, oder er ist lokal, innerhalb einer Funktion.
function func () {
// lokaler Kontext
eval("...");
// Hier rufe ich eval auf. Der Kontext ist der eben dieser Funktion. Sprich, der mit eval ausgeführte Code hat Zugriff auf die lokalen Variablen.
window.eval("...");
// Ist nichts anderes als eine direktere, ausführliche Schreibweise des ersten eval-Aufrufs, bei der nicht nach einer lokalen Variable namens eval gesucht wird. Der Kontext ist hier ebenfalls der durch die Funktion func erzeugte.
}
Dass abweichende Verhalten von Gecko lässt sich m.M.n. nicht aus JavaScript 1.5 bzw. ECMAScript herauslesen und ist offenbar auch nicht dokumentiert.
Mathias