hansmüller: *.js in *.js includieren

Wie kann ich eine JavaScriptdatei in einer anderen JavaScriptdatei verwenden?
in HTML geht das ja über <script ... scr="...">, aber wie geht das inerhalb der *.js-Datei???

Hans

  1. Hallo hansmüller.

    Wie kann ich eine JavaScriptdatei in einer anderen JavaScriptdatei verwenden?

    Gar nicht. Die einzige Möglichkeit, die mir einfiele, wäre das dynamische http://de.selfhtml.org/javascript/objekte/document.htm#create_element@title=Generieren und in den Dokumentenbaum http://de.selfhtml.org/javascript/objekte/node.htm#append_child@title=Einhängen eines http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#script@title=script–Elementes.

    Einen schönen Dienstag noch.

    Gruß, Ashura

    --
    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]
    1. Gar nicht.

      Schad... :-/ Dann mach ich das halt übern php-include. Wird wohl das Einfachste sein.

      Hans

  2. Hallo hansmüller.

    document.write("<script src='datei.js' type='text/javascript'></script>");
    müsste den Effekt erzielen den du willst.

    Siehe hierzu: </archiv/2005/3/t104638/>

    Man liest sich, H2O

    --
    Dodwin | Download Opera
    [ie:% fl:( br:< va:) ls:[ fo:| rl:( n4:( ss:) de:> js:| ch:? sh:( mo:| zu:}](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%25%20fl%3A(%20br%3A%3C%20va%3A)%20ls%3A%5B%20fo%3A%7C%20rl%3A(%20n4%3A(%20ss%3A)%20de%3A%3E%20js%3A%7C%20ch%3A%3F%20sh%3A(%20mo%3A%7C%20zu%3A%7D)
  3. Hallo Hans!

    Wie kann ich eine JavaScriptdatei in einer anderen JavaScriptdatei verwenden?
    in HTML geht das ja über <script ... scr="...">, aber wie geht das inerhalb der *.js-Datei???

    Ich denke das sollte mit ssi gehen wenn die *.js-Dateien auf einem Webserver liegen:
    http://de.selfhtml.org/servercgi/server/ssi.htm

    <!--#include file="..." -->

    Viele Grüße

    H-P Ortner

    1. hallo,

      Wie kann ich eine JavaScriptdatei in einer anderen JavaScriptdatei verwenden?
      Ich denke das sollte mit ssi gehen

      Nein, damit kommst du nicht zu dem gewünschten Ergebnis.

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      SELFTreffen Dresden
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
      1. Hello out there!

        Ich denke das sollte mit ssi gehen

        Nein, damit kommst du nicht zu dem gewünschten Ergebnis.

        Äh doch!? Warum sollte es nicht gehen?

        See ya up the road,
        Gunnar

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
        1. hallo Gunnar,

          Äh doch!? Warum sollte es nicht gehen?

          Weil dann der Server angewiesen werden müßte, *.js als *.shtml zu parsen, was ein heilloses Durcheinander ergibt.

          Grüße aus Berlin

          Christoph S.

          --
          Visitenkarte
          ss:| zu:) ls:& fo:) va:) sh:| rl:|
          1. Hello out there!

            Äh doch!? Warum sollte es nicht gehen?
            Weil dann der Server angewiesen werden müßte, *.js als *.shtml zu parsen,

            Nein, nicht als *.shtml, sondern nach SSI.

            was ein heilloses Durcheinander ergibt.

            AddType text/html shtml  
            AddType text/javascript js  
            AddHandler server-parsed shtml js
            

            Wo ist da ein Durcheinander?

            See ya up the road,
            Gunnar

            --
            “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
            1. hallo Gunnar,

              AddType text/html shtml

              AddType text/javascript js
              AddHandler server-parsed shtml js

              
              > Wo ist da ein Durcheinander?  
                
              Verlange bitte nicht, daß ich das teste. Zu vermuten steht (da nicht getestet), daß dann eben \_alle\_ \*.js als SSI behandelt werden. Das bedeutet: der darin enthaltene Code wird nicht mehr zwingend ausgeführt, sondern dargestellt - allerdings in Abhängigkeit von der gewählten include-Syntax. Wenn du sowas in der Serverkonfiguration vorsiehst, funktioniert vermutlich  
                <script type="text/javascript" src="javascript.js"></script>  
              nicht mehr, da es ja vom Server als SSI ausgeliefert werden würde. Und \_das\_ meinte ich mit "heilloses Durcheinander". Allerdings: wie bereits angegeben, habe ich keine Lust, das zu testen. Probiere du mal. Erhältst du ein funktionierendes Ergebnis, nehme ich das gerne zur Kenntnis.  
                
                
              Grüße (in Erwartung deiner Mißerfolgsmeldung) aus der Nachbarschaft  
                
              Christoph S.
              
              -- 
              [Visitenkarte](http://community.de.selfhtml.org/visitenkarten/view.php?key=26)  
                
              ss:| zu:) ls:& fo:) va:) sh:| rl:|
              
              1. Hello out there!

                AddHandler server-parsed shtml js

                Zu vermuten steht (da nicht getestet), daß dann eben _alle_ *.js als SSI behandelt werden.

                Ja. Natürlich sollte man, wenn man das wirklich einsetzt, nur die JavaScript-Dateien durch die SSI-Engine schicken, die das nötig haben: entweder diese alle in .htaccess auflisten oder doch besser eine andere Endung (sjs) vergeben.

                Das bedeutet: der darin enthaltene Code wird nicht mehr zwingend ausgeführt, sondern dargestellt

                Ähm, du weißt auch nachts um halb drei noch, was ein Webserver tut?! Der Server stellt nichts dar, sondern führt aus – bspw. auch SSI. Um was es sich dabei für Dateien handelt (HTML, JavaScript, ...) ist ihn dabei sowas von schnurzpiepegal.

                Der Client bekommt natürlich von alledem nichts mit; er erhält eine JavaScript-Datei, in der von SSI nichts mehr zu sehen ist, dafür steht der aus der anderen Datei eingefügte Code drin.

                funktioniert vermutlich
                  <script type="text/javascript" src="javascript.js"></script>
                nicht mehr, da es ja vom Server als SSI ausgeliefert werden würde.

                Ähm, du weißt auch nachts um halb drei noch, was ein Webserver tut?! Er liefert nichts als SSI aus, sondern führt SSI aus. Dabei ist ihm sowas von schnurzpiepegal, als was er das am Ende ausliefert (HTML, JavaScript, ...). Aber ich wiederhole mich.

                (in Erwartung deiner Mißerfolgsmeldung)

                Da muss ich dich enttäuschen:

                .htaccess:
                AddHandler server-parsed sjs
                (mehr ist gar nicht nötig)

                foo.js:
                var foo = 'foo';

                bar.sjs:
                <!--#include virtual="foo.js" -->
                alert(foo);

                index.html:

                <!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">  
                  <head>  
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
                    <title>TEST</title>  
                    <script type="text/javascript" src="bar.sjs"></script>  
                  </head>  
                  <body>  
                  </body>  
                </html>
                

                Und so sieht’s aus.

                See ya up the road,
                Gunnar

                --
                “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                1. Hell-O!

                  http://gangstaplaya.de/TEST/javascript-ssi-20060802/

                  <blick class="ungläubig entsetzt">
                  Bist du jetzt etwa vom Liedermacher zum Gangstarappa mutiert?!
                  </blick>

                  Siechfred

                  --
                  Hier könnte Ihre Werbung stehen.
                  Räucherofen selber gebaut || Das Steuerblog  || RT 221 Erfurt-Altstadt i.V.
                  1. Hello out there!

                    <blick class="ungläubig entsetzt">
                    Bist du jetzt etwa vom Liedermacher zum Gangstarappa mutiert?!
                    </blick>

                    Das nicht, aber ... Du kannst deinen ungläubig entsetzten Blick beibehalten: Meine Domain gunnarbittersmann.de liegt *schäm* immer noch auf Webspace ohne SSI, PHP, ...

                    Deshalb benutzte ich für solche Dinge diese andere, mit deren Inhalt, Gestaltung und Umsetzung außerhalb von TEST ich nichts zu tun habe.

                    See ya up the road,
                    Gunnar

                    --
                    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                    1. Hell-O!

                      Meine Domain gunnarbittersmann.de liegt *schäm* immer noch auf Webspace ohne SSI, PHP, ... Deshalb benutzte ich für solche Dinge diese andere, mit deren Inhalt, Gestaltung und Umsetzung außerhalb von TEST ich nichts zu tun habe.

                      Das wäre ja so, als ob ich als bekennender Headbanger meine Perl- und PHP-Versuche auf der Domain von Florian Silbereisen testen würde ;-)

                      Siechfred

                      --
                      Hier könnte Ihre Werbung stehen.
                      Räucherofen selber gebaut || Das Steuerblog  || RT 221 Erfurt-Altstadt i.V.
                      1. Hallo.

                        Das wäre ja so, als ob ich als bekennender Headbanger meine Perl- und PHP-Versuche auf der Domain von Florian Silbereisen testen würde ;-)

                        Genügt dir auch ein bekennender Jazzer, der mit Heino und den Hellwig-Schwestern Perlen produziert?
                        MfG, at

  4. Hello out there!

    in HTML geht das ja über <script ... scr="...">,

    ^^
    Nein, so geht’s nicht. ;-)

    aber wie geht das inerhalb der *.js-Datei???

    Wozu das? Warum bindest du nicht beide Scripte im HTML ein?

    <script type="text/javascript" src="foo.js"></script>  
    <script type="text/javascript" src="bar.js"></script>
    

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
    1. Hallo!

      Wozu das? Warum bindest du nicht beide Scripte im HTML ein?

      <script type="text/javascript" src="foo.js"></script>

      <script type="text/javascript" src="bar.js"></script>

        
      Ich mach nicht viel mit JavaScript aber bei umfangreicheren Projekten könnte es interessant sein, sie in so etwas wie Module zu unterteilen.  
        
      Eine etwas aufwendigere Funktion könnte so wiederverwendet werden.  
        
      Wenn nun ein JavaScript diese Funktion braucht, wäre es doch schön sie dort direkt einbinden zu können.  
        
      Also wenn foo.js von bar.js benötigt wird, von hello.js nicht, aber von world.js schon, so fände ich es praktisch jede Kombination von bar.js, hello.js und world.js verwenden zu können ohne darüber nachdenken zu müssen, ob ich foo.js jetzt auch einbinden muss oder nicht.  
        
      Für ein größeres Projekt würde ich auch am Beginn nach einem Konzept dafür suchen, wie Hans das jetzt gemacht hat.  
        
      Viele Grüße  
        
      H-P Ortner
      
      1. hallo,

        Also wenn foo.js von bar.js benötigt wird, von hello.js nicht, aber von world.js schon, so fände ich es praktisch jede Kombination von bar.js, hello.js und world.js verwenden zu können ohne darüber nachdenken zu müssen, ob ich foo.js jetzt auch einbinden muss oder nicht.

        Das kannst du auf genau diese Weise tun, die Gunnar vorgeschlagen hat. In "bar.js" können alle Funktionen aus "foo.js" erneut aufgerufen und in neuen Funktionen verwendet werden.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hallo Cristoph!

          Also wenn foo.js von bar.js benötigt wird, von hello.js nicht, aber von world.js schon, so fände ich es praktisch jede Kombination von bar.js, hello.js und world.js verwenden zu können ohne darüber nachdenken zu müssen, ob ich foo.js jetzt auch einbinden muss oder nicht.

          Das kannst du auf genau diese Weise tun, die Gunnar vorgeschlagen hat. In "bar.js" können alle Funktionen aus "foo.js" erneut aufgerufen und in neuen Funktionen verwendet werden.

          So weit hatte ich das schon verstanden. Aber ich muss in der HTML Datei immer überlegen, was ich jetzt mit einbinden muss.

          Wenn ich nur hello.js verwende, sollte ich foo.js nicht einbinden, weil das dann ja umsonst geladen und geparst wird. Wenn ich world.js verwende, muss ich es einbinden weil sonst kommt irgendwann eine Fehlermeldung wenn die fehlende Funktion gebraucht wird.

          Dazu muss ich mir diese Abhängigkeiten merken, eine Doku darüber anfertigen, oder im schlimmsten Fall immer wieder testen.

          Wenn das direkt eingebunden wäre, müsste ich mich nicht darum kümmern.

          Viele Grüße

          H-P Ortner

          1. Hello out there!

            Aber ich muss in der HTML Datei immer überlegen, was ich jetzt mit einbinden muss.

            Das entfällt natürlich bei serverseitigen Includes. Serverseitig sieht dann auch alles schön modular aus. Aber ...

            Wenn du das Modul foo.js öfter verwendest (in bar.js, baz.js, ...) und es serverseitig in diese einfügst, wird dieses Stück Code immer wieder zum Client geschickt. Das kostet Traffic – und für den Nutzer Ladezeit. Clientseitig ist von Modularität nichts mehr zu spüren.

            Gibst du hingegen im HTML an, welche Module du gerade für diese Webseite benötigst, werden schon übertragene (weil auch auf anderen Seiten benutzte) Module aus dem Cache geholt.

            See ya up the road,
            Gunnar

            --
            “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
          2. Hell-O!

            So weit hatte ich das schon verstanden. Aber ich muss in der HTML Datei immer überlegen, was ich jetzt mit einbinden muss.

            Warum das? Du kannst die JS-Ressourcen auch mit Hilfe des DOM dynamisch nachladen, wenn du sie brauchst. So als Denkanstoß:

            function DynaLoad(source) {  
              var sElem = document.createElement('script');  
              sElem.type = 'text/javascript';  
              sElem.src = source + '.js';  
              document.getElementsByTagName('head')[0].appendChild(sElem);  
            }  
              
            if(typeof window['gesuchte_funktion'] == 'undefined') {  
              DynaLoad('script_mit_gesuchter_funktion');  
              alert('Geladen.');  
            }  
            gesuchte_funktion();
            

            Das Ganze in einem Basis-Script gespeichert, das als Einziges zusammen mit der HTML-Datei geladen wird. Alle anderen Komponenten werden durch o.g. Code bei Bedarf nachgeladen.

            Siechfred

            --
            Hier könnte Ihre Werbung stehen.
            Räucherofen selber gebaut || Das Steuerblog  || RT 221 Erfurt-Altstadt i.V.
            1. Hallo Siechfried!

              So weit hatte ich das schon verstanden. Aber ich muss in der HTML Datei immer überlegen, was ich jetzt mit einbinden muss.

              Warum das? Du kannst die JS-Ressourcen auch mit Hilfe des DOM dynamisch nachladen, wenn du sie brauchst.

              Noch einmal zum Beispiel:

              Also wenn foo.js von bar.js benötigt wird, von hello.js nicht, aber von world.js schon, so fände ich es praktisch jede Kombination von bar.js, hello.js und world.js verwenden zu können ohne darüber nachdenken zu müssen, ob ich foo.js jetzt auch einbinden muss oder nicht.

              Mit der von dir gezeigten Methode kann bar.js nicht foo.js dynamisch nachladen. Zumindest bekomm ich es nicht hin.

              Und wenn ich das in der HTML-Datei machen muss, kann ich es ja gleich einbinden wie Gunnar oben geschrieben hat.

              Irgendwie kann ich nicht glauben, dass es keine Möglichkeit gibt, dass eine JS-Datei eine andere Aufruft ohne den Umweg über html gehen zu müssen.

              Viele Grüße

              H-P Ortner

              1. Hell-O!

                Mit der von dir gezeigten Methode kann bar.js nicht foo.js dynamisch nachladen. Zumindest bekomm ich es nicht hin.

                Doch, das geht schon, allerdings brauchst du zwingend DOM dafür. In bar.js kannst du die Funktion Dynaload unterbringen, die bei Bedarf - also wenn eine Funktion aus foo.js benötigt wird - ein Script-Element in den Dokumentenbaum einhängt und so foo.js dynamisch nachlädt.

                Irgendwie kann ich nicht glauben, dass es keine Möglichkeit gibt, dass eine JS-Datei eine andere Aufruft ohne den Umweg über html gehen zu müssen.

                Ist aber so, denn so ist das grundlegende Konzept von Javascript: Es wird immer aus einer HTML-Datei heraus geladen.

                Siechfred

                --
                Hier könnte Ihre Werbung stehen.
                Räucherofen selber gebaut || Das Steuerblog  || RT 221 Erfurt-Altstadt i.V.
                1. Hallo Siechfred!

                  Irgendwie kann ich nicht glauben, dass es keine Möglichkeit gibt, dass eine JS-Datei eine andere Aufruft ohne den Umweg über html gehen zu müssen.

                  Ist aber so, denn so ist das grundlegende Konzept von Javascript: Es wird immer aus einer HTML-Datei heraus geladen.

                  Da hat jemand ein Tutorial für Javasript als Sprache für ASP geschrieben: http://aspjavascript.com/lesson.asp

                  Javascipt funktioniert also auch ohne in HTML eingebettet zu sein.
                  Und wie lösen die dann das Modularisieren? In Lesson 13 mit SSI was serverseitig ja OK ist.

                  Clientseitig brauche ich natürlich den Browser, der Lösungsansatz das in das DOM einzubauen drängt sich also auf.

                  Danke der Denkanstoß scheint in die richtige Richtung zu führen. Vermutlich bin ich daran gescheitert, dass der IE mit dem ich das probiert habe, den neuen Code im selben Programmteil noch ignoriert.

                  Sollte das in den nächsten Tagen noch einmal in aller Ruhe ausprobieren.

                  Viele Grüße

                  H-P Ortner

                  1. Tach,

                    Da hat jemand ein Tutorial für Javasript als Sprache für ASP geschrieben: http://aspjavascript.com/lesson.asp

                    das ist JScript und kein Javascript, Javascript kennt das ab Lektion 1 verwendete Response-Objekt nicht.

                    mfg
                    Woodfighter

  5. Hallo.

    scr="..."

    "Sorry, could resist"?
    MfG, at

    1. Hello out there!

      scr="..."
      "Sorry, could resist"?

      Nein, „da fehlt ein n.“

      SCNR & See ya up the road,
      Gunnar

      --
      “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)