Mathias Brodala: JavaScript - Funktion in/aus XML Datei ausführen

Beitrag lesen

Hallo molily.

»Wie kann ich die Funktion im selben Dokument ausführen«: Erst einmal gar nicht, du kannst den Browser nicht dazu bekommen, das script-Element wie ein script-Element im HTML-Dokument zu behandeln. Du kannst höchstens den Textinhalt des Elementes auslesen und diesen Code mit eval() ausführen. (Das ist ungefähr der allerübelste Stil, den man in JavaScript programmieren kann, aber anders gehts nicht.) Dann ist die Funktion im aktuellen globalen Geltungsbereich deklariert und du kannst sie regulär aufrufen.

Darüber habe ich mir gerade ein paar Gedanken gemacht und bin bei folgendem gelandet:

<!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" lang="de" xml:lang="de">  
  <head>  
    <title></title>  
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />  
    <script type="text/javascript">  
  
    window.onload = function() {  
  
      var c = document.getElementsByTagName('code')[0];  
      var h = document.getElementsByTagName('head')[0]  
      var s = document.createElement('script');  
          s.type = 'text/javascript';  
          s.appendChild(document.createTextNode(c.firstChild.nodeValue));  
  
      h.appendChild(s);  
  
      try {  
        foo()  
      } catch(e) {}  
  
    }  
  
    </script>  
  </head>  
  <body>  
    <pre><code>function foo() {  
  alert('Hallo Welt');  
}</code></pre>  
  </body>  
</html>

Was hältst du davon? Natürlich könnten die Zeichendaten, die hier aus dem code–Element stammen ebenso gut aus dem responseText bzw. responseXML geholt werden. Als funktionstüchtig hat sich die Methode in Opera, Firefox und Konqueror erwiesen. Nur der IE streikt und meldet „Unerwarteter Aufruf oder Zugriff“. Eine Idee?

Einen schönen Samstag noch.

Gruß, Mathias

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[HTML Design Constraints: Logical Markup]