oaktree: externe javascript-Datei mittels document.write() einbinden

Hallo!

Mit javascript schreibe ich den gesamten Inhalt einer html-Datei neu. Dabei möchte ich eine externe javascript-Datei einbinden. Wenn ich es mit
document.writeln('<script language="javascript" type="text/javascript" src="datei.js"></script>')
versuche, klappt es im ie und im opera, der nn4.7 ignoriert es aber; d.h., im neuen Quelltext steht dort eine Leerzeile.
Ich habe schon versucht, den </script> Teil in ein neues document.writeln() zu packen oder das gesamte mit wahllosen '+' aufzulockern, aber das hat nichts gebracht. Auch das Zusammenfügen von Variablen führte zum selben Ergebnis:
var Datei = 'datei.js';
document.writeln('<script langu'+'age="jav'+'ascript" type="text/javasc'+'ript" src="'+Datei+'"></sc'+'ript>')

Das Schreiben eines javascript-Bereichs ist kein Problem:
document.writeln('<script language="javascript">')
document.writeln('alert('klappt')')
document.writeln('</script>')
versteht er.

Ich weiß nicht, was ich noch ausprobieren soll.

Vielleicht kennt ja jemand eine Lösung. Ich wäre sehr dankbar dafür.

Danke und bye
Steffen

  1. Hi

    Hmm, ich hab vor einiger Zeit auch fruchtlos damit rumprobiert,
    sieht so aus als ob NS sich weigert externe JS dynamisch einzubinden

    Waer schon echt praktisch sowas ;)

    Mal zwo Vorschläge die auf jd Fall mit Frames klappen eventuell sogar ohne:

    Workaround1: versuch doch das Script von anfang an statisch einzubinden
    und später von der dynamischen Seite aus anzusprechen, z.B. ueber ein
    anderes Frame. Eventuell klapt das auch im gleichen Frame!

    Workaround2: Falls die Scripte zu groß dafuer sind um auf einmal geladen zu werden
    werden koenntest du Sie ja in normalen HTMLs kapseln und die nachladen.

    Sach bitte B. falls es klappt!

    Bye LanX

    1. Hallo LanX!

      Mal zwo Vorschläge die auf jd Fall mit Frames klappen eventuell sogar ohne:

      Das ganze mit frames zu lösen ist keine schlechte Idee. Wenn ich keine sauberere Lösung finde, werde ich es so machen.

      Vielen Dank!

      bye
      Steffen

  2. Hallo Steffen,

    Auch das Zusammenfügen von Variablen führte zum selben Ergebnis:

    var Datei = 'datei.js';
    document.writeln('<script langu'+'age="jav'+'ascript" type="text/javasc'+'ript" src="'+Datei+'"></sc'+'ript>')

    Baue erst den gesamten Quellcode in einer Variablen zusammen

    die_seite='....';
    und schreibe dann einfach: document.writeln(die_seite)

    Also nur 1 document.write im Text

    Viele Grüße

    Antje

    1. Hallo Antje!

      Baue erst den gesamten Quellcode in einer Variablen zusammen

      die_seite='....';
      und schreibe dann einfach: document.writeln(die_seite)

      Ich habe es jetzt so versucht:

      var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
      self.document.open()
      self.document.write(Seite)
      self.document.close()

      (In der Variabel sind keine Zeilenumbrüche.)

      Das führt aber zum selben Ergebnis. Wenn ich mir vom nn den neuen Quelltext anzeigen lasse, steht dort:
      <HTML><HEAD></HEAD><BODY></BODY></HTML>

      Was mache ich falsch?

      Danke und bye
      Steffen

      1. Hallo oaktree!

        (In der Variabel sind keine Zeilenumbrüche.)

        Das ist eher schlecht. Zumindest das eine oder andere \n stimmt ihn gnädiger.

        Das führt aber zum selben Ergebnis. Wenn ich mir vom nn den neuen Quelltext anzeigen lasse, steht dort:
        <HTML><HEAD></HEAD><BODY></BODY></HTML>

        Das war zu erwarten.

        Was mache ich falsch?

        Du glaubst das die Quelltextanzeige bei mit document.write geschrieben Inhalten JavaScript bereiche anzeigt. Tut sie aber nicht.

        Ausserdem wird die Quelltextanzeige manchmal nach einen Dokumenten-Reload nicht aktualisert. (->Beenden und neustarten)

        Gruss,
         Carsten

        1. Hallo Carsten!

          Das ist eher schlecht. Zumindest das eine oder andere \n stimmt ihn gnädiger.

          Damit wollte ich sagen, dass ich die Variabel richtig geschrieben habe - falls das Forum einen Zeilenumbruch macht.

          Du glaubst das die Quelltextanzeige bei mit document.write geschrieben Inhalten JavaScript bereiche anzeigt. Tut sie aber nicht.

          Stimmt, das habe ich auch gemerkt, aber das ändert nichts daran, dass die Datei nicht geladen wird. Wenn ich z.B. eine function aus der Datei aufrufen will, kommt die Meldung 'blabla() is not defined'. Auch ein automatischer alert wird nicht ausgeführt.

          bye
          Steffen

          1. Stimmt, das habe ich auch gemerkt, aber das ändert nichts daran, dass die Datei nicht geladen wird. Wenn ich z.B. eine function aus der Datei aufrufen will, kommt die Meldung 'blabla() is not defined'. Auch ein automatischer alert wird nicht ausgeführt.

            Bei mir klappts aber astrein!!! (NS4 /Linux)

            Vielleicht solltest du beachten unter welchem Pfad du die externen
            Funktionen ansprichst!

            Bye LanX

            http://www.mathematik.tu-darmstadt.de/~langsdorf/Quickforum/test.htm
            *********test.htm **********

            <html>
              <head>
                <title></title>
            <script language="JavaScript">
              <!--
             var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
             self.document.open();
             self.document.write(Seite);
             self.document.close();
              //-->
              </script>

            </head>
             </body>
            </html>

            *******datei.js ***********
            alert("jojo");

            1. Auch das klappt:

              ****** test.htm *******
              ...
                   josef();
                //-->
                </script>
              ...

              ***datei.js ***
              function josef(){
               alert("josef");
              }

              Vielleicht solltest du mal deinen kompletten Code posten!

              Tschuessi Rolf

              1. Hallo!

                Vielleicht solltest du mal deinen kompletten Code posten!

                <html>
                <head>
                <title>test</title>
                <script language="javascript">
                <!--
                function schreiben()
                {
                var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
                self.document.open()
                self.document.write(Seite)
                self.document.close()
                }
                //-->
                </script>
                </head>
                <body onLoad="schreiben()">
                </body>
                </html>

                und die datei.js sieht so aus:
                alert("Es funzt!")

                Die Pfadangabe stimmt bzw. befinden sich beide Dateien im selben Ordner.

                bye
                Steffen

                1. Hi Steffen

                  function schreiben()
                  {
                  var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
                  self.document.open()
                  self.document.write(Seite)
                  self.document.close()

                  Ich dachte zuerst es liegt daran das du keine Semikolons eingefuegt hast,
                  aber ich versteh zumindest dein Problem besser, je nach useraction JS-Code
                  nachladen (wahrscheinlich mit Daten),allerdings ...

                  ... was bei dir in schreiben() geschieht, ist dass du die gesamte HTML-Page
                  ueberschreibst, dann koenntest du aber auch, wie bereits vorgeschlagen
                  gleich ne ganze HTML-Page nachladen, die den nachzuladenden Code kapselt.
                  Damit der alte Code nicht ueberschrieben wird lädst du ihn ebenfalls nach...

                  <script src=altercode ...
                  <script src=neuercode1 ...
                  ...HTML design ...

                  Ich persoenlich wuerde es allerdings gleich mit Frames machen! Einer fuer den alten
                  Code mit funktionierender HTML-GUI, und die nachzuladenden Daten in die zwote
                  Frame, des ist alles viel sauberer!

                  Verstehste wie ich das meine???

                  Viele Gruesse Rolf

                  1. Hallo Rolf!

                    Ich persoenlich wuerde es allerdings gleich mit Frames machen! Einer fuer den alten
                    Code mit funktionierender HTML-GUI, und die nachzuladenden Daten in die zwote
                    Frame, des ist alles viel sauberer!

                    Verstehste wie ich das meine???

                    Jo, das ist eine gute Idee und die Umsetzung ist auch kein Problem. Ich finde es zwar etwas "unsauber", aber da mir sonst auch nichts mehr einfällt, werde ich auf den nn fluchen und es mit frames machen ;-)

                    bye
                    Steffen

                    1. Hi Steffen

                      Naja Frames haben einige Designtechnische Probleme, wenn man aber mit JS anfaengt
                      haben sie Riesenvorteile. Mir fallen auf Anhieb kaum browser ein bei den DHTML
                      mit JS dafuer aber keine Frames sinnvoll sind!

                      Mal zwo anderer Ansätze ohne Frames:

                      (Ich nehme mal an du willst per Mausklick Daten nachladen willst, indem du
                      ein extrenes JS-File einbindest)

                      a) Du lädst immer die gleiche Page nach alleine im Suchstring uebergibst du den
                      Namen der jeweils nachzuladenden Datei, also

                      page.htm?datenX.js

                      Wir haben gesehen, das NS extrenes JS included, solange es im Header passiert.
                      Im header wertest du dann den Suchstring aus und machst ein
                      entsprechendes write.
                      also:

                      *********** page.htm ************
                      <head>
                      suchstring=window.location.search;
                      write('<script src='+suchstring+'>')
                      </head>

                      <body>
                        <a href=page.htm?daten1.js> daten1 anzeigen</a>
                        <a href=page.htm?daten2.js> daten2 anzeigen</a>
                        <script>
                      //     daten auswerten und reinschreiben
                        </script>

                      </body>

                      Das klappt bestimmt unter NS,ich geh jetzt abe mal an die Sonne und du testest!

                      b) Dieser Ansatz geht anders (verschachtelte JS-Includes) aber ich find
                      den letzten schon genial genug ;-)) falls der nicht klappt reden wir
                      weiter!

                      Viele Grueße
                      Rolf

                      1. Hallo Rolf!

                        Naja Frames haben einige Designtechnische Probleme, wenn man aber mit JS anfaengt
                        haben sie Riesenvorteile. Mir fallen auf Anhieb kaum browser ein bei den DHTML
                        mit JS dafuer aber keine Frames sinnvoll sind!

                        Also so sehr Anfänger bin ich dann doch nicht mehr, dass ich das nicht hinbekommen würde ;-) Ich konnte mir nur nicht erklären, warum der nn die Datei nicht läd. Das hat ja jetzt Antje aufgeklärt und ich werde das dann mal online ausprobieren (das kann ich nur gerade nicht).

                        bye
                        Steffen

                        1. Hi Steffen

                          Also so sehr Anfänger bin ich dann doch nicht mehr, dass ich das nicht hinbekommen würde ;-) Ich konnte mir nur nicht erklären, warum der nn die Datei nicht läd. Das hat ja jetzt Antje aufgeklärt und ich werde das dann mal online ausprobieren (das kann ich nur gerade nicht).

                          ??? offensichtlich bin ich der anfaenger weil ich verstehe Antjes Posting
                          nicht, wenns an der Pfadangabe liegt wieso klappt es im Header aber
                          nicht im Body???

                          Naja, egal, tschuess, lebt wohl, seid fruchtbar etc... ;-)

                          Rolf

                          1. Hallo Rolf!

                            ??? offensichtlich bin ich der anfaenger weil ich verstehe Antjes Posting
                            nicht, wenns an der Pfadangabe liegt wieso klappt es im Header aber
                            nicht im Body???

                            Naja, die Aussage ist wohl die, dass der nn in die Datei schreibt, wo die Datei sich befindet und davon ausgehend dann die Pfadangaben berechnet. Warum das nicht immer zu einem Fehler führt, verstehe ich auch nicht, aber schieben wir es getrost auf den Bug ;-)

                            Naja, egal, tschuess, lebt wohl, seid fruchtbar etc... ;-)

                            Ich werde mein bestes versuchen ;-)

                            Nochmals danke und bye
                            Steffen

                2. Hallo Steffen,

                  ich habe es

                  also rufe ich die Datei so auf:

                  http://lokal.kd.de/test.html

                  klappt es.

                  So aber nicht:

                  file://r:/kd/test.html
                       ^^
                  der NN macht daraus ein:

                  file:/r:/kd/test.html
                       ^^

                  Die Pfadangabe stimmt bzw. befinden sich beide Dateien im selben Ordner.

                  eben nicht, der NN schreibt in Seiten mit document.write oft ein

                  <BASE HREF="file:/r:/kd/">

                  in den Quelltext rein und das fehlerhaft. Dieser Bug - er gilt nicht für alle NN-Browser - sorgt dafür, dass er die js-Datei nicht findet.
                  Online klappt es dann.

                  Viele Grüße

                  Antje

                  1. Hallo Antje!

                    Die Pfadangabe stimmt bzw. befinden sich beide Dateien im selben Ordner.

                    eben nicht, der NN schreibt in Seiten mit document.write oft ein

                    <BASE HREF="file:/r:/kd/">

                    in den Quelltext rein und das fehlerhaft. Dieser Bug - er gilt nicht für alle NN-Browser - sorgt dafür, dass er die js-Datei nicht findet.
                    Online klappt es dann.

                    Vielen Dank für den Hinweis! - dann liegt also doch nicht an mir ;-)
                    Ich werde es bei Gelegenheit mal testen.

                    bye
                    Steffen

            2. Hallo!

              <html>
                <head>
                  <title></title>
              <script language="JavaScript">
                <!--
              var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
              self.document.open();
              self.document.write(Seite);
              self.document.close();
                //-->
                </script>
                </head>
              </body>
              </html>

              Wenn ich es so mache, klappt es bei mir auch, aber wenn ich es in eine function packe, klappt es nicht. Da ich beim Laden der Datei noch nicht alle Inhalte der "neuen" Datei weiß, kann ich es aber nicht so machen.
              Außerdem wiederholen sich bei dieser Methode einige Elemente.

              bye
              Steffen

              1. Hi Steffen,

                Wenn ich es so mache, klappt es bei mir auch, aber wenn ich es in eine function packe, klappt es
                nicht.

                ????

                Sorry, ich versteh nur Bahnhof, poste doch mal deinen Code,
                dann wirds vielleicht klarer!

                Viele Grueße Rolf

                1. Hallo LanX!

                  Sorry, ich versteh nur Bahnhof, poste doch mal deinen Code,
                  dann wirds vielleicht klarer!

                  Siehe <?m=135156&t=25872>

                  bye
                  Steffen