heinerle: JS-Datei in Javascript inkludieren

Hallo liebe Gemeinde,

ich habe ein riesiges Problem, bei dem ich nicht weiterkomme. Ich habs natürlich auch mit der Suchfunktion probiert, aber entweder verwende ich die falschen Suchbegriffe, oder es gibt nichts zu dem Thema.
Zum Problem:
Ein CMS bietet mir die Möglichkeit, am Anfang der Templatedatei eine frontend.js einzubinden. Die Betonung liegt hier auf EINE JS-Datei.
Und genau das ist das Problem.
Ich möchte mir ein Galerie-Modul einbinden, welches das Einbinden mehrerer verschiedener JS-Dateien im head erfordert (diverse AJAX-Bibliotheken).

In PHP wäre es einfach. Eine Datei mit Namen frontend.php und dort einfach die weiteren Scripte inkludieren mittels include() oder require()
FRAGE:
Geht sowas auch irgendwie mit JS zu lösen? Kann ich in einer JS-Datei weitere Dateien inkludieren?

thx für eure Hilfe
heinerle

  1. Hallo,

    Geht sowas auch irgendwie mit JS zu lösen? Kann ich in einer JS-Datei weitere Dateien inkludieren?

    also so weit ich das weiß geht so etwas nicht. du kannst natürlich über die html-datei meherer skripte includen.

    MfG. Christoph

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
    Go to this or Go to this
    1. Hi,

      du kannst natürlich über die html-datei meherer skripte includen.

      ... und da man mittels JavaScript das HTML-Dokument manipulieren kann ... Das größte Problem ist, dass das ganze je nach Browser nicht mehr die Synchronizität hat, die man sich oft wünscht.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Lieber Cheatah,

        Deine Fachgewalt in Ehren, aber der OP braucht da deutlich mehr Schützenhilfe als ein bedeutungsschwangeres

        ... und da man mittels JavaScript das HTML-Dokument manipulieren kann ...

        Du hättest ja darauf hinweisen können, dass man mittels DOM-Funktionen à la document.createElement() ein neues <script>-Element erzeugen und in das Dokument einbinden kann. Der Browser führt dann den JavaScript-Code nach dem Einbinden (und dem anschließenden Laden des neuen Scripts) auch aus!

        Das größte Problem ist, dass das ganze je nach Browser nicht mehr die Synchronizität hat, die man sich oft wünscht.

        Und was fängt ein darin Unerfahrener mit dieser fachlich völlig richtigen und auch relevanten Aussage an? Genau: nichts, denn sie ist zu knapp. Darum ergänze ich das einmal.

        Die nachträglich eingebundenen Scripte werden eventuell zu einem anderen Zeitpunkt ausgeführt, als das die "fest codierten" Scripte wahrscheinlich tun, sodass eventuell Zustände oder das Vorhandensein bestimmter Objekte (oder auch HTML-Elemente) nicht zu den im Script vorausgesetzten Umständen passen könnten. Daher ist eventuell Feinarbeit in den Scripten gefordert - eventuell.

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Die nachträglich eingebundenen Scripte werden eventuell zu einem anderen Zeitpunkt ausgeführt, als das die "fest codierten" Scripte wahrscheinlich tun, sodass eventuell Zustände oder das Vorhandensein bestimmter Objekte (oder auch HTML-Elemente) nicht zu den im Script vorausgesetzten Umständen passen könnten. Daher ist eventuell Feinarbeit in den Scripten gefordert - eventuell.

          also um es mal so zu sagen, wie ich es verstehe:
          der Code wird doch an der Stelle ausgeführt, an der er aufgerufen wird?
          bind ich ihn im head ein, müsste er dort ausgeführt werden.

          wann wird ein write() ausgeführt? nach dem kompletten html-Aufbau, oder dort wo ich es aufrufe?
          Diese Frage ist deshalb wichtig, weil das einzubindende Script eine Funktion enthält, welche vor dem <body> ausgeführt werden muss.

          1. Liebes heinerle,

            der Code wird doch an der Stelle ausgeführt, an der er aufgerufen wird?

            das kommt darauf an... ist nicht immer so.

            bind ich ihn im head ein, müsste er dort ausgeführt werden.

            Ja. Aber _wie_ bindest Du ihn ein? Steht er im HTML-Dokument beim Ladevorgang, dann wird er beim Laden ausgeführt. Kommt er dort erst später durch DOM-Manipulationen hin, wird er erst dann ausgeführt, nachdem er nach der Manipulation geladen wurde. Das ist ein wesentlicher Unterschied! Und das ist genau das, was Cheatah mit der Synchronizität gemeint hat.

            wann wird ein write() ausgeführt? nach dem kompletten html-Aufbau, oder dort wo ich es aufrufe?

            Welches write() denn bitteschön? Das ist keine XHTML-fähige Vorgehensweise! Das solltest Du im Prinzip nicht machen, sondern eher so, wie in meinem Beispiel.

            Diese Frage ist deshalb wichtig, weil das einzubindende Script eine Funktion enthält, welche vor dem <body> ausgeführt werden muss.

            Der <body> wird nicht "ausgeführt". Und man kann das Ausführen einer Funktion auch nach dem endgültigen Laden einer Seite noch erfolgreich starten. Wenn man sich dann noch den DOM-Baum entlang hangelt, dann ist es im Grunde sogar egal, wo genau das Script im HTML-Dokument eingebunden wurde. Allerdings ist die Vorraussetzung dafür, dass Du Dich von document.write() _komplett_ verabschiedest!

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        2. Hallo,

          Und was fängt ein darin Unerfahrener mit dieser fachlich völlig richtigen und auch relevanten Aussage an? Genau: nichts, denn sie ist zu knapp. Darum ergänze ich das einmal.

          Bezieht sich das etwa auf MICH ?

          MfG. Christoph

          --
          Wo die Sprache aufhört, fängt die Musik an...
          Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
          Go to this or Go to this
          1. Lieber Christoph,

            Bezieht sich das etwa auf MICH ?

            ich dachte dabei weniger an Dich, als viel mehr an den OP. Aber wenn Du Dir diesen Schuh anziehen möchtest... ;-)

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
            1. Hallo,

              ich dachte dabei weniger an Dich, als viel mehr an den OP. Aber wenn Du Dir diesen Schuh anziehen möchtest... ;-)

              Naja das klang nur so...

              MfG. Christoph

              --
              Wo die Sprache aufhört, fängt die Musik an...
              Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
              Go to this or Go to this
    2. Hallo,

      Geht sowas auch irgendwie mit JS zu lösen? Kann ich in einer JS-Datei weitere Dateien inkludieren?

      also so weit ich das weiß geht so etwas nicht. du kannst natürlich über die html-datei meherer skripte includen.

      MfG. Christoph

      genau da liegt ja aber das Problem. Es ist ein Template. Und die Funktion für die Frontend-JS lässt nur genau eine Javascript-Datei zu und diese muss den Namen frontend.js haben.
      Will ich weitere Javascript-Dateien einbinden, müsste ich die "hard codieren" und das ist ja nicht Sinn und Zweck eines Templatesystems :-(

      heinerle

      1. Hallo,

        genau da liegt ja aber das Problem. Es ist ein Template. Und die Funktion für die Frontend-JS lässt nur genau eine Javascript-Datei zu und diese muss den Namen frontend.js haben.
        Will ich weitere Javascript-Dateien einbinden, müsste ich die "hard codieren" und das ist ja nicht Sinn und Zweck eines Templatesystems :-(

        nagut ... wenn es denn nicht anders geht, könntest du auch mit ein bisschen arbeitsaufwand die beiden skripte zu einem machen ;)
        nur denke ich, das das erst recht nicht der sinn ist.

        MfG. Christoph

        --
        Wo die Sprache aufhört, fängt die Musik an...
        Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
        Go to this or Go to this
        1. Hallo,

          genau da liegt ja aber das Problem. Es ist ein Template. Und die Funktion für die Frontend-JS lässt nur genau eine Javascript-Datei zu und diese muss den Namen frontend.js haben.
          Will ich weitere Javascript-Dateien einbinden, müsste ich die "hard codieren" und das ist ja nicht Sinn und Zweck eines Templatesystems :-(

          nagut ... wenn es denn nicht anders geht, könntest du auch mit ein bisschen arbeitsaufwand die beiden skripte zu einem machen ;)
          nur denke ich, das das erst recht nicht der sinn ist.

          MfG. Christoph

          den gedanken hatte ich auch schon ;) aber das ist im prinzip ne komplette bildergelerie und das ist den aufwand nicht wirklich wert. so lange wie ich da brauchen würde, da köbbte ich wahrscheinlich auch gleich alles neu schreibn.
          falls ich keine möglichkeit finde, muss ich mal die Core-Programmierer des CMS anbetteln, ob die nicht die registerfunktionen anpassen können. im endeffekt wird dieses problem ja mit sicherheit weitere benutzer treffen, die eigene module einbinden wollen

          heinerle

          1. Hallo,

            den gedanken hatte ich auch schon ;) aber das ist im prinzip ne komplette bildergelerie und das ist den aufwand nicht wirklich wert. so lange wie ich da brauchen würde, da köbbte ich wahrscheinlich auch gleich alles neu schreibn.
            falls ich keine möglichkeit finde, muss ich mal die Core-Programmierer des CMS anbetteln, ob die nicht die registerfunktionen anpassen können. im endeffekt wird dieses problem ja mit sicherheit weitere benutzer treffen, die eigene module einbinden wollen

            Nagut ... aber etwas besseres fällt mir da im moment nicht ein ...
            du kannst den typen ja mal fragen ;)

            MfG. Christoph

            --
            Wo die Sprache aufhört, fängt die Musik an...
            Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
            Go to this or Go to this
            1. Liebe(r) minicrispie,

              falls ich keine möglichkeit finde, muss ich mal die Core-Programmierer des CMS anbetteln, ob die nicht[...]

              Nagut ... aber etwas besseres fällt mir da im moment nicht ein ...

              das wird alles nicht nötig sein. Ich habe mir ein extra Script geschrieben, das mir weitere JavaScripte nachlädt. Vielleicht findet ihr im Code das ein oder andere Detail, das weiterhelfen kann?

              js_loader.js

              Zu benutzen ist dieses Script so: Im <head> des Dokumentes das JavaScript regulär einbinden. In einem neuen <script>-Element notiert man dann folgendes:

              <script type="text/javascript">
              jsLoader.load("meinscript1, meinscript2, meinscript3");
              </script>

              Diese "Aliase" wie z.B. "meinscript1" müssten natürlich vorher im Script definiert worden sein. Aber das sieht man ja im Quellcode.

              Liebe Grüße aus Ellwangen,

              Felix Riesterer.

              --
              ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
              1. Danke Felix,

                ich glaube, dass das genau die lösung ist, die ich benötige, da es nicht nur mein geschildertes problem zu lösen scheint, sondern auch ein anderes, welches ich noch nicht in angriff genommen habe :)

                der inhalt deiner datei ist eigentlich im grossen und ganzen genau der inhalt, den ich benötige, um meine frontend.js zu realisieren.
                ich muss nur noch eine kleine fallunterscheidung einbauen und dann sollte es passen :)

                hast mein restliches WE gerettet

                thx
                heinerle

                1. Liebes heinerle,

                  freut mich, wenn es Dir von Nutzen ist. Dann war meine Arbeit nicht nur für mich gewinnbringend. :-)

                  Liebe Grüße aus Ellwangen,

                  Felix Riesterer.

                  --
                  ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      2. Es ist ein Template.

        Und du kannst in einem Template keinen HTML-Code zum Einbinden einer Javascript-Datei einbinden? Was sind denn das für Templates?

  2. Hallo heinerle,

    Geht sowas auch irgendwie mit JS zu lösen? Kann ich in einer JS-Datei weitere Dateien inkludieren?

    Einfachste Möglichkeit wäre

    document.write('<script src="..." type="text/javascript"></script>');

    Kann aber wie schon angesprochen in manchen Fällen Probleme machen.

    Jonathan

    1. document.write('<script src="..." type="text/javascript"></script>');

      Nicht ganz:

      document.write('<script src="..." type="text/javascript"><\/script>');

      Kann aber wie schon angesprochen in manchen Fällen Probleme machen.

      In welchen?

      Struppi.

      1. Hallo,

        document.write('<script src="..." type="text/javascript"></script>');

        Nicht ganz:

        document.write('<script src="..." type="text/javascript"><\/script>');

        Im Falle von "Kann ich in einer JS-Datei weitere Dateien inkludieren?" ist ersteres schon okay, letzteres ist nur nötig, wenn man JavaScript-Code in HTML-Dokumenten unterbringt, was man i.d.R. ohnehin vermeiden kann und sollte.

        Mathias