Vera: DOM im Internet Explorer

Guten Abend liebe Wissende,

ich bekomme es im Internet Explorer 7 einfach nicht hin und bin ratlos. Folgendes Script funktioniert im Firefox problemlos:

<div id="enAdmin"></div>  
<script type="text/javascript">  
function action()  {  
	var basis = document.getElementById("enAdmin");  
	var s=document.createElement("script");  
    	s.setAttribute("type", "text/javascript");  
	var node = document.createTextNode("alert('Test');");  
        // -vv-  hier kommt eine Fehlermeldung im Internet Explorer  
    	s.appendChild(node);  
    	basis.appendChild(s);  
}  
window.setTimeout("action()", 3000);  
</script>

Ich möchte dynamisch generiertes Javascript in dem statischen DIV einfügen, was mir im besagten Browser leider nicht gelingt. Ich bitte Euch darum um Hilfe.

danke schonmal
Vera

  1. Hallo Vera,

    var node = document.createTextNode("alert('Test');");
            // -vv-  hier kommt eine Fehlermeldung im Internet Explorer
         s.appendChild(node);

    du könntest mal s.text = "alert('Test');"; an Stelle des Textknotens
    oder eval("alert('Test');") versuchen.

    Gruß, Jürgen

    1. Vielen vielen Dank Jürgen,

      das hat mir jetzt die Nacht gerettet.
      s.text = "alert('Test');";
      war genau das was der IE 7 wollte.

      also Danke nochmal
      Vera

      Hallo Vera,

      »» var node = document.createTextNode("alert('Test');");
      »»         // -vv-  hier kommt eine Fehlermeldung im Internet Explorer
      »»      s.appendChild(node);

      du könntest mal s.text = "alert('Test');"; an Stelle des Textknotens
      oder eval("alert('Test');") versuchen.

      Gruß, Jürgen

  2. var s=document.createElement("script");
         s.setAttribute("type", "text/javascript");
    var node = document.createTextNode("alert('Test');");)

    Wieso dieser Umweg über ein script-Element?
    Warum nimmst du nicht eval?

    Ich möchte dynamisch generiertes Javascript in dem statischen DIV einfügen

    Warum ist es wichtig, dass ein script-Element ins div-Element kommt? Reicht es nicht, den JS-Code einfach direkt auszuführen?

    Mathias

    1. Hallo Mathias,

      dies ist eine akzeptable Lösung für das Verarbeiten eines Ajax Request. Hierbei wird HTML- und Javascript Code aus einer PHP Datei an den Client geschickt, wobei Letzterer bei einem Mausklick "nachträglich" ausgeführt werden soll.

      Die Lösung mit eval() hatte ich schon vorher getestet, jedoch konnte ich hiermit keine dynamische JS Funktion definieren, die dann per Mausklick auf ein HTML Element aufgerufen werden kann.

      »» Ich möchte dynamisch generiertes Javascript in dem statischen DIV einfügen

      Warum ist es wichtig, dass ein script-Element ins div-Element kommt? Reicht es nicht, den JS-Code einfach direkt auszuführen?

      "Normalerweise" kann natürlich die Javascript Funktion auch ausserhalb des DIVs dynamisch plaziert werden. Es geht jedoch hierbei um eine eingebettete Webanwendung die möglichst stark gekapselt sein sollte. Die Javascript Funktionen werden hierbei (bei Bedarf) dynamisch nachgeladen.

      dank Dir auch für die Hinweise
      dieser Teil funktioniert problemlos

      Vera

      1. Die Lösung mit eval() hatte ich schon vorher getestet, jedoch konnte ich hiermit keine dynamische JS Funktion definieren, die dann per Mausklick auf ein HTML Element aufgerufen werden kann.

        Dann machst du etwas falsch. Wobei für sowas noch nicht mal eval nötig ist, das geht auch mit new Function().

        Struppi.

      2. Die Lösung mit eval() hatte ich schon vorher getestet, jedoch konnte ich hiermit keine dynamische JS Funktion definieren, die dann per Mausklick auf ein HTML Element aufgerufen werden kann.

        In </archiv/2009/3/t184380/> ging es um ein ähnliches Problem.

        "Normalerweise" kann natürlich die Javascript Funktion auch ausserhalb des DIVs dynamisch plaziert werden. Es geht jedoch hierbei um eine eingebettete Webanwendung die möglichst stark gekapselt sein sollte.

        Ob das script-Element in ein div oder den head eingefügt wird, trägt effektiv zur »Kapselung« nichts bei.

        Mathias

        1. » Die Lösung mit eval() hatte ich schon vorher getestet, jedoch konnte ich hiermit keine dynamische JS Funktion definieren, die dann per Mausklick auf ein HTML Element aufgerufen werden kann.

          In </archiv/2009/3/t184380/> ging es um ein ähnliches Problem.

          Ging es?
          Sie hat doch nur gesagt, dass sie keine dynamische Funtion einem HTML Element zuweisen kann und dazu sind keine Verrenkungen nötig.

          Vor allem hat Vera ja nicht gesagt, wie die Funktion definiert wird. Es kann durchaus sein, dass sie nicht weiß was closures sind und wie man diese definiert (zumindest sieht der Beispielcode so aus) und evtl. ist das das eigentliche Problem.

          Struppi.

          1. jedoch konnte ich hiermit keine dynamische JS Funktion definieren, die dann per Mausklick auf ein HTML Element aufgerufen werden kann.
            Sie hat doch nur gesagt, ...

            Stimmt. Ginge wie du sagst:

            element.onevent = new Function("JS-Code als String");

            Mathias

            1. Das sich das hier noch in einen so hilfreichen Thread ausweitet, hätte ich allerdings nicht gedacht... . In der Tat habe ich bisher mit unstrukturierten Scripten gearbeitet. Nach etwas Suchen habe ich den interessanten Artikel gefunden, den ich mir nun erstmal durchlesen werde:

              http://aktuell.de.selfhtml.org/artikel/javascript/organisation/

              In meinem kongreten Fall geht es um ein LogIn Formular das über einen Ajax Request zusammen mit einer kleinen Sicherheitsfunktion an den den Clienten (einfach als String) geschickt wird. Alle Formularfelder sind anfangs deaktiviert. Das Formular enthält ein Bild-Tag auf welches geklickt werden muss damit das Formular ausfüllbar wird, zudem werden die Namen der Formularfelder hierdurch geändert. Diese Dinge werden in der einfachen Sicherheitsfunktion gesetzt, die mit einem Klick auf das Bild nach ca. 4 Sekunden aufgerufen wird.

              Es ist nur ein kleiner Schutz gegen Anmeldebots bzw. automatisierten Brute Force. Die eigentlichen Prüfungen inclusive der Auswertung der Wartezeit werden dann durch Logs in PHP durchgeführt.

              also wie ich schon geschrieben werde ich mich zunächst weiterbilden und die Scripte anpassen, ich danke Euch für die Anregungen und Hinweise

              und verbleibe bis demnächst mal wieder
              Vera