Johanna: Scope von eval() im IE anders als im FF???

Beitrag lesen

Hallo ihr,

ich hab ein nerviges Problem, das mich schon den ganzen Sonntag beschäftigt.

DER KONTEXT:
Stark vereinfacht ist es so: über einen XHR bekomme ich vom Server z.B. folgendes HTML und folgendes JS als String geschickt:

- HTML: <a href="#" onclick="test()">click me</a>
  - JS: "function test() { alert('TEST'); }"

Meine XHR Callback-Funktion für den Erfolgsfall fügt den HTML-Code in den DOM der Seite ein und wertet das JS per eval(...) aus.

DAS EIGENTLICHE PROBLEM:
Im Endeffekt kann ich das Problem also auf folgenden Testcode abbilden:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>Test</title>
<script type="text/javascript">

runScript = function(code) {
  eval(code);
};

runScript ("function test() { alert('TEST'); }");

</script>
</head>
<body><a href="#" onclick="test()">click me</a></body>
</html>

Bei Klick auf den Link kommt es im obigen Bsp. sowohl im IE also auch im FF zum Fehler. Beide finden die Funktion "test" nicht, da der entsprechende String im Scope der Funktion "runScript()" ausgeführt wurde. Klar!

Also definiere ich die Funktion so:

runScript = function(code) {
  window.eval(code);
};

Nun sollte doch die Funktion "test" im Scope des "window"-Objekts ausgeführt und damit an dieses "angehängt" werden. Da der Code in onclick etc. auch immer im Scope des "window"-Objekts ausgeführt wird (ist doch so, oder???) sollte doch nun ein Klick auf den Link ein Fenster mit "TEST" hervorbringen. DENKSTE!!! Firefox macht das ganze wie erwartet. Der IE meint jedoch: "Object expected" und zeigt auf die Zeile des Links.

WARUM??? Oder besser, wie kriege ich es hin, dass es in beiden Browsern funktioniert???

Würde ich übrigens den Funktionsstring so vom Server erhalten: "test = function() { alert('TEST'); };" funktionierts unverständlicherweise in beiden Browsern - sogar ohne "window." vor eval().
Leider ist der Funktionsstring und der String hinter onclick für mich nicht zu beeinflussen!!! Das heißt ich muss das oben geschilderte Problem für den IE lösen.

Kann mir da jemad helfen?
BITTE, BITTE, BITTE!

Grüße,
Johanna