Beate Mielke: grundsätzliches Problem bei externen Javascript-Dateien?

Hallo ForumerInnen,

ich habe ein Javascript, das ein Popup-Fenster öffnet.

Es läuft einwandfrei.

Sobald ich es völlig unverändert in eine Datei.js auslagere und mit dem üblichen Befehl.

<script language="JavaScript" src="Datei.js" type="text/javascript">
</script>

aufrufe, kommen Fehlermeldungen derart, daß die Funktion nicht gefunden wird oder Variablen nicht definiert seien.

So wird es aufgerufen:
<!--
document.write("<a href="javascript:show('Text')">blubber</a>");
//-->

Gibt es da irgendetwas Grundsätzliches, das man in so einem Fall beachten müßte?

Die Pfadangabe zur datei ist mit Sicherheit richtig.

Gruss

Beate Mielke

  1. Hallo Beate!

    Mit externen Javascript Dateien hatte ich noch nie Probleme - was ich mir aber Vorstellen könnte: Hast du auf gross- und kleinschreibung bei der Pfadanbage geachtet?

    Bis dann
    Alex

    1. Hallo Alex,

      Mit externen Javascript Dateien hatte ich noch nie Probleme - was ich mir aber Vorstellen könnte: Hast du auf gross- und kleinschreibung bei der Pfadanbage geachtet?

      leider ist es auch das nicht, das habe ich daraufhin nochmal überprüft.

      Gruss

      Beate Mielke

  2. Hallo Beate

    <script language="JavaScript" src="Datei.js" type="text/javascript">
    </script>

    aufrufe, kommen Fehlermeldungen derart, daß die Funktion nicht gefunden wird oder Variablen nicht definiert seien.

    So wird es aufgerufen:
    <!--
    document.write("<a href="javascript:show('Text')">blubber</a>");
    //-->

    Bindest Du die JS-Datei im gleichen Frame ein, in dem Du den Funktionsaufruf machst?

    Wenn Du z.B. Dein document.write() in ein Sub-Frame machst, die JS-Datei aber im Haupt-Frame oder Frame-Set einbindest, dann müsste der Funktionsaufruf "top.show('Text')" lauten.
    Anstelle von 'top' (für das Hauptfenster) könntest Du aber auch den Namen des Frames direkt verwenden, z.B. ContentFrame.show('text').

    Wichtig ist, dass alle Funktionen (und auch Variablen, die nicht mit var deklariert sind) als Methoden (bzw. Eigenschaften) des Fensters erscheinen, in dem der JS-Code definiert ist, bzw. eingebunden wird.
    Dies ist eine Folge des Prototyping, wie es in JavaScript verwendet wird.

    Ich hoffe, dass dieser Ansatz Dein Problem lösen könnte.
    Andernfalls bräuchte ich ein URL zum testen.

    Grüsse
    Tom

    1. Hallo Tom,

      Bindest Du die JS-Datei im gleichen Frame ein, in dem Du den Funktionsaufruf machst?

      Ja, ist im gleichen Frame.

      Andernfalls bräuchte ich ein URL zum testen.

      Dies ist die URL von der ich alles abgekupfert habe:

      http://www.esperanto.de/org/lv.berlin/Fragen.htm
      (funktioniert so, Datei ist ja auch hier nicht ausgelagert.

      die Original-URL, die ich jetzt bearbeite ist noch nicht im Internet. Aber der Quelltext sieht so aus:

      <script language="JavaScript">

      var info_win = window.open("fip/info.htm", "info_window", "width=150,height=100,scrollbars=1,resizable=1,location=0,directories=0,toolbar=0,status=0,menubar=0");
      info_win.close();

      function show(x)
      {
      if (info_win.closed == true)
      info_win = window.open("fip/info.htm", "info_window", "width=150,height=100,scrollbars=1,resizable=1,location=0,directories=0,toolbar=0,status=0,menubar=0");
      info_win.focus();
      info_win.document.open("text/html");
      info_win.document.writeln("<html><head></head>");
      info_win.document.write("<body bgcolor='#dbebf5'>");
      info_win.document.write("<font face='Verdana,Geneva,Helvetica,Arial' size='2'>",x,"</font>");
      info_win.document.write("<font face='Verdana,Geneva,Helvetica,Arial' size='1'><br> <br><a href='javascript:self.close();'>Fenster schließen</a></font>")
      info_win.document.writeln("</body></html>");
      info_win.document.close();
      }
      //-->
      </script>

      und der Aufruf in der HTML-Datei so:

      <script type="text/javascript" language="Javascript">
      <!--
      document.write("<a href="javascript:show('Text')">blubber</a>");
      //-->
      </script>

      Der Witz ist, jetzt, wo ich es aus der .js-Datei zurueck in die HTML-Datei kopiert habe, geht es dort auch nicht mehr.
      Die Fehlermeldung verweist immer auf die Zeile:

      info_win.document.open("text/html");

      Vielleicht faellt ja irgendjemandem noch etwas ein.

      Viele Gruesse

      Beate Mielke

      1. Hallo Beate

        Ich habe Deinen Code kurz in 3 Dateien (die Dateien habe ich Dir per E-Mail zugesandt) verteilt und diese auf unserem Intranet-Server (WinNT, IIS 4.0) getestet.
        Das ganze funktioniert bei mir sowohl mit Netscape 4.7 als auch IE 5.0 (unter WinNT) fehlerfrei.
          
        Das einzige was der Browser bei mir angemeckert hat, war das der Server nicht gefunden werden kann, was sich auf die URL im window.open()-Befehl bezieht.
        Vielleicht musst Du im open()-Befehl eine vollständige URL angeben.

        Grüsse
        Tom

        1. Hallo Tom,

          Ich habe Deinen Code kurz in 3 Dateien (die Dateien habe ich Dir per E-Mail zugesandt) verteilt und diese auf unserem Intranet-Server (WinNT, IIS 4.0) getestet.

          Leider ist die Email bei mir defekt angekommen, das heisst, ich konnte die Anhaenge nicht oeffnen.
          Koenntest Du die drei Inhalte einfach hier nochmal als Antwort darstellen?

          Danke und Gruss

          Beate Mielke

          1. Hallo Beate

            Sorry, dass die Antwort so lange auf sich warten lässt...
            ... ich wurde durch ein Liebesbrief aufgehalten ;-)

            Hier die Dateien:

            ========= HTML-Datei: TestBM.html ===========
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
            <html>
            <head>
               <title>Untitled</title>
               <script type="" language="JavaScript" src="testBM.js"></script>
            </head>

            <body>

            Beispieltext...<br>
               Dein Link:
               <script type="text/javascript" language="Javascript">
               <!--
               document.write("<a href="javascript:show('Text')">blubber</a>");
               //-->
               </script>

            </body>
            </html>
            ==== Ende HTML-Datei==========

            ==== JS-Datei: testBM.js ========
            var info_win = window.open("info.htm", "info_window",
            "width=150,height=100,scrollbars=1,resizable=1,location=0,directories=0,toolbar=0,status=0,menubar=0");
            info_win.close();

            function show(x)
            {
               if (info_win.closed == true)
               info_win = window.open("info.htm", "info_window",
               "width=150,height=100,scrollbars=1,resizable=1,location=0,directories=0,toolbar=0,status=0,menubar=0");
               info_win.focus();
               info_win.document.open("text/html");
               info_win.document.writeln("<html><head></head>");
               info_win.document.write("<body bgcolor='#dbebf5'>");
               info_win.document.write("<font face='Verdana,Geneva,Helvetica,Arial' size='2'>",x,"</font>");
               info_win.document.write("<font face='Verdana,Geneva,Helvetica,Arial' size='1'><br> <br><a href='javascript:self.close();'>Fenster schließen</a></font>")
               info_win.document.writeln("</body></html>");
               info_win.document.close();
            }
            ==== Ende JS-Datei ============

            Als "info.htm" habe ich eine beliebige HTML-Datei verwendet.

            Alle Dateien lagen bei mir im gleichen Verzeichnis.
            Und sie liessen sich in beiden Browsern darstellen, bzw. das Fenster mit dem dynamisch generierten Inhalt aufrufen.
            Dies müsste dem Code nach auch zweifelsfrei funktionieren.

            Teste es nochmal, vielleicht klappt es diesmal...
            ansonsten werden wir den Fehler woanders suchen müssen.

            Grüsse
            Tom

            1. Hallo Tom,

              Sorry, dass die Antwort so lange auf sich warten lässt...
              ... ich wurde durch ein Liebesbrief aufgehalten ;-)

              von EINEM??? Ich hatte gestern ungefaehr 30 Stueck davon im Postkasten.

              -------------------------------------------------------------------------------------------------------------------------------------------------------

              Hier die Dateien:

              ========= HTML-Datei: TestBM.html ===========
              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
              <html>
              <head>
                 <title>Untitled</title>
                 <script type="" language="JavaScript" src="testBM.js"></script>
              </head>

              <body>

              Beispieltext...

              Dein Link:
                 <script type="text/javascript" language="Javascript">
                 <!--
                 document.write("<a href="javascript:show('Text')">blubber</a>");
                 //-->
                 </script>

              </body>
              </html>
              ==== Ende HTML-Datei==========

              ==== JS-Datei: testBM.js ========
              var info_win = window.open("info.htm", "info_window",
              "width=150,height=100,scrollbars=1,resizable=1,location=0,directories=0,toolbar=0,status=0,menubar=0");
              info_win.close();

              function show(x)
              {
                 if (info_win.closed == true)
                 info_win = window.open("info.htm", "info_window",
                 "width=150,height=100,scrollbars=1,resizable=1,location=0,directories=0,toolbar=0,status=0,menubar=0");
                 info_win.focus();
                 info_win.document.open("text/html");
                 info_win.document.writeln("<html><head></head>");
                 info_win.document.write("<body bgcolor='#dbebf5'>");
                 info_win.document.write("<font face='Verdana,Geneva,Helvetica,Arial' size='2'>",x,"</font>");
                 info_win.document.write("<font face='Verdana,Geneva,Helvetica,Arial' size='1'>

              »»

              <a href='javascript:self.close();'>Fenster schließen</a></font>")
                 info_win.document.writeln("</body></html>");
                 info_win.document.close();
              }
              ==== Ende JS-Datei ============

              Als "info.htm" habe ich eine beliebige HTML-Datei verwendet.

              Alle Dateien lagen bei mir im gleichen Verzeichnis.
              Und sie liessen sich in beiden Browsern darstellen, bzw. das Fenster mit dem dynamisch generierten Inhalt aufrufen.
              Dies müsste dem Code nach auch zweifelsfrei funktionieren.

              Teste es nochmal, vielleicht klappt es diesmal...
              ansonsten werden wir den Fehler woanders suchen müssen.

              So, jetzt habe ich ihn, den Uebeltaeter!
              Es laeuft wie bei Dir alles richtig, ich habe nur, ohne es zu merken, die Datei "info.htm" in ein Verzeichnis gelegt, das nur für CGI-Programme gedacht war und entsprechend waren dort auch die Rechte gesetzt.
              Das war in diesem speziellen Fall nicht so einfach zu erkennen, weil im gleichen Verzeichnis auch andere .htm-Dateien liegen, die aber gemeinerweise gar keine sind.
              Jaja, so kann's gehen.

              Danke für Deine Mühe.

              Gruss

              Beate Mielke

  3. Hallo Beate,

    was ich mir noch vorstellen könnte:

    Du erzeugst mit document.write eine "neue" Datei. Der Verweis auf die externe Javascript-Datei muß in dieser "neuen" Datei natürlich auch drin sein. Du müßtest also mindestens noch ausgeben

    document.write('<script language="JavaScript" src="Datei.js" type="text/javascript"></script>');
    document.write("<a href="javascript:show('Text')">blubber</a>");

    Dann gehts bestimmt.

    Gruß,
    Thomas Mirke

    1. Hallo Thomas

      Du erzeugst mit document.write eine "neue" Datei. Der Verweis auf die externe Javascript-Datei muß in dieser "neuen" Datei natürlich auch drin sein. Du müßtest also mindestens noch ausgeben

      document.write('<script language="JavaScript" src="Datei.js" type="text/javascript"></script>');
      document.write("<a href="javascript:show('Text')">blubber</a>");

      Nicht ganz richtig.

      Wird document.write() innerhalb des Body-Bereichs eines HTML-Dokumentes aufgerufen, so schreibt document.write('Text') den 'Text' genau an die aktuelle Postion im HTML-Dokument.
      Es wird kein neues Dokument-Objekt erzeugt.

      Wird document.write() im Head-Bereich eines HTML-Dokumentes verwendet, so bezieht sich document.write() auf das aktuelle Fenster-Objekt.
      Natürlich kann auch ein anderes Window-Objekt direkt adressiert werden, z.B. mit dem Aufruf myWindow.document.write(), wobei myWindow dem Rückgabewert der window.open-Methode oder einem Frame-Namen in der Frameset-Definition entspricht.
      In beiden Fällen wird der bestehende Inhalt des Dokument-Objektes im adressierten Fenster überschrieben, da keine aktuelle Einfügepostion für die Write-Methode vorhanden ist.

      Grüsse
      Tom

      1. Wird document.write() innerhalb des Body-Bereichs eines HTML-Dokumentes aufgerufen, so schreibt document.write('Text') den 'Text' genau an die aktuelle Postion im HTML-Dokument.
        Es wird kein neues Dokument-Objekt erzeugt.

        Hallo Tom,

        damit hast Du natürlich recht. Aus Beates Frage ging (für mich) nicht genau hervor, wo sie document.write('bla') aufruft. Vielleicht schreibt sie noch, woran es nun lag, würde mich interessieren.

        Gruß von Thomas