Announcement

Collapse
No announcement yet.

Problem mit Javascript-Funktionen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit Javascript-Funktionen

    Hallo,

    ich habe folgendes Problem:

    es existiert ein (inzwischen ziemlich grosses) Webprojekt, welches teilweise einige Bereiche (Seiten) per Ajax in ein Div läd. Diese so geladenen Seiten enthalten auch diverse Javascript - Funktionsaufrufe, welche in der Hauptseite (jene, welche das Laden eines Bereiches ausführt) stehen.

    Jedoch werden die Javascripte in den per Ajax geladenen Seiten entweder garnicht, oder wenn dann nur unmittelbar weniger Sekunden (meist < 2 Sekunden) nur einmalig ausgeführt.

    Javascripte, welche in der zu ladenen Seite stehen, werden prinzipiell garnicht ausgeführt.

    Wie kann ich dieses Problem beheben? Diese Javascriptfunktionen sollen immer ausführbar sein, solange der jeweilige Bereich geladen ist.

  • #2
    Hallo Baerchen,

    das liegt nicht grundsätzlich an AJAX, sondern eher daran das bei der einfachen Zuweisung an innerHTML eines div-Containers kein Javascript geparst wird. Soll JS dynamisch korrekt eingebunden werden, muß im DOM ein entsprechender Script-Knoten eingefügt werden.
    Das folgende Beispiel soll dies verdeutlichen:
    HTML Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
      <title>Titel</title>
      <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
      <meta name="description" content="" />
    <script type="text/javascript">
    <!--
      var dynJS = '<script type="text/javascript">alert(\'JS erfolgreich dynamisch geladen :)!\');<\/script>'
    
      function doVariante1()
      {
        var cont = document.getElementById('contJS');
        cont.innerHTML = dynJS;
        alert('Geladen ?');
      }
    
      function doVariante2()
      {
        var oHead = (document.getElementsByTagName('head'))[0];
        var newScript = document.createElement("script");
        var scriptID = 'eindeutig';
        if (document.getElementById(scriptID))
          oHead.removeChild(document.getElementById(scriptID));
    
        newScript.type = "text/javascript";
        newScript.id = scriptID;
        var re = /<script[^>]*>(.*)<\/script>/;
        re.exec(dynJS);
        newScript.text = RegExp.$1;
        oHead.appendChild(newScript);
        alert('Geladen ?');
      }
    -->
    </script>
    </head>
    <body>
      <p>
        <a href="javascript:doVariante1()">Variante1</a><br />
        <a href="javascript:doVariante2()">Variante2</a>
      </p>
      <div id="contJS"></div>
    </body>
    </html>
    Variante1 stellt dabei die übliche Vorgehensweise zur dynamischen Anzeige von HTML-Content (welcher z.B. über AJAX geladen wurde) in einem div-Container über innerHTML dar. Hierbei wird der JS-Code NICHT ausgeführt.

    Variante2 bindet das JS über das DOM in den head der Seite ein. Hierbei wird der JS-Code einwandfrei ausgeführt.

    Wenn du dynamisch Inhalt nachladen möchtest, dann solltest du den HTML- und den JS-Teil getrennt behandeln.

    Gruß Falk
    Zuletzt editiert von Falk Prüfer; 26.09.2008, 12:47.
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hi Falk,

      Vielen Dank für die schnelle Antwort.

      Comment

      Working...
      X