Christian: Problem mit <script>

Hi Leute,

ich will mein JS in eine externe Datei einbinden und folge dem Beispiel aus dem wiki (quadrat.js). Die Seite bleibt komplett weiß, es wird auch nicht der <body> ausgeführt. Die html- und js-Seiten liegen im gleichen Verzeichnis.

Quellcode x.html:

<!DOCTYPE html>
<html>
<head>
<title>Test.js</title>
<script src="test.js"/>
</head>
<body>
HALLO mnsdkfjksdlfjksdljflsdjflksdjfjsdflkjsdfkljsdfkljksdl
</body>
</html>

test.js:

function test() {
 alert ("test.js");
 }

Ich weiß nicht weiter.

Viele Grüße Christian

  1. Hallo Christian,

    <!DOCTYPE html>
    <html>
    <head>
    <title>Test.js</title>
    <script src="test.js"/>
    </head>
    <body>
    HALLO mnsdkfjksdlfjksdljflsdjflksdjfjsdflkjsdfkljsdfkljksdl
    </body>
    </html>
    

    Du kannst script nicht verkürzen, du musst <script src="test.js"></script> ausschreiben.

    LG,
    CK

    1. Aloha ;)

      Du kannst script nicht verkürzen, du musst <script src="test.js"></script> ausschreiben.

      Jein. Man sollte nicht. Manche Browser können damit umgehen, manche nicht.

      Grüße,

      RIDER

      --
      Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
      1. Hallo Camping_RIDER,

        Du kannst script nicht verkürzen, du musst <script src="test.js"></script> ausschreiben.

        Jein. Man sollte nicht.

        Nein, man darf nicht. In XHTML ist das für script explizit verboten:

        <!ELEMENT script (#PCDATA)>
        

        (beachte das fehlende EMPTY) und HTML5 kennt self-closing tags nicht.

        Manche Browser können damit umgehen, manche nicht.

        Dass manche Browser eine Error-Recovery dafür haben ist in der Tat richtig.

        LG,
        CK

        1. Aloha ;)

          Du kannst script nicht verkürzen, du musst <script src="test.js"></script> ausschreiben.

          Jein. Man sollte nicht.

          Nein, man darf nicht. In XHTML ist das für script explizit verboten:

          <!ELEMENT script (#PCDATA)>
          

          (beachte das fehlende EMPTY und HTML5 kennt self-closing tags nicht.

          Ah, okay. Danke für die Klarstellung. War mir in der Intensität für XHTML nicht bewusst.

          War es aber nicht so, dass self-closing tags in HTML5 verwendet werden können - und ist das eventuell unabhängig von der XHTML-Spec? Ich hab da sowas im Hinterkopf, dass die HTML5-Spec da dementsprechend liberal wäre.

          Kann mich aber auch täuschen, bin ja selbst nicht immer HTML5-firm :D

          Grüße,

          RIDER

          --
          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
          1. Hallo Camping_RIDER,

            War es aber nicht so, dass self-closing tags in HTML5 verwendet werden können - und ist das eventuell unabhängig von der XHTML-Spec? Ich hab da sowas im Hinterkopf, dass die HTML5-Spec da dementsprechend liberal wäre.

            Nur für bestimmte Tags, script gehört nicht dazu.

            LG,
            CK

            1. @@Christian Kruse

              War es aber nicht so, dass self-closing tags in HTML5 verwendet werden können - und ist das eventuell unabhängig von der XHTML-Spec? Ich hab da sowas im Hinterkopf, dass die HTML5-Spec da dementsprechend liberal wäre.

              Nur für bestimmte Tags, script gehört nicht dazu.

              Und zwar bei denjenigen Elementen, bei denen der HTML-Parser kein End-Tag erwartet: leere Elemente und solche, deren End-Tag in HTML optional ist.

              Und wie du sagtest: script gehört nicht dazu.

              LLAP 🖖

              --
              Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
              1. Hallo und guten Tag,

                Darf man denn dann im Script-Element trotzdem noch Inhalt notieren, obwohl man schon eine externe Source angegeben hat?

                Grüße
                TS

                1. Hallo TS,

                  Darf man denn dann im Script-Element trotzdem noch Inhalt notieren, obwohl man schon eine externe Source angegeben hat?

                  Bei HTML5 ist es verboten:

                  If there is a src attribute, the element must be either empty or contain only script documentation that also matches script content restrictions.
                  

                  Das gleiche gilt im wesentlichen für HTML4 und XHTML:

                  If the src has a URI value, user agents must ignore the element's contents and retrieve the script via the URI.
                  

                  LG,
                  CK

                  1. @@Christian Kruse

                    Darf man denn dann im Script-Element trotzdem noch Inhalt notieren, obwohl man schon eine externe Source angegeben hat?

                    Bei HTML5 ist es verboten:

                    Nein, ist es nicht. Zitierst du doch selber:

                    If there is a src attribute, the element must be either empty or contain only script documentation that also matches script content restrictions.
                    

                    “or contain only script documentation” Und wenn du auf script documentation clicks, wird erklärt, was als Inhalt vorkommen darf: JavaScript-Kommentare.

                    LLAP 🖖

                    --
                    Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                    1. Hallo Gunnar,

                      Darf man denn dann im Script-Element trotzdem noch Inhalt notieren, obwohl man schon eine externe Source angegeben hat?

                      Bei HTML5 ist es verboten:

                      Nein, ist es nicht. Zitierst du doch selber:

                      Das ist nicht das, was gemeint war :-)

                      LG,
                      CK

                    2. Hallo und guten Tag Gunnar,

                      GRRR

                      Darf man denn dann im Script-Element trotzdem noch Inhalt notieren, obwohl man schon eine externe Source angegeben hat?

                      Bei HTML5 ist es verboten:

                      Nein, ist es nicht. Zitierst du doch selber:

                      If there is a src attribute, the element must be either empty or contain only script documentation that also matches script content restrictions.
                      

                      “or contain only script documentation” Und wenn du auf script documentation clicks, wird erklärt, was als Inhalt vorkommen darf: JavaScript-Kommentare.

                      Das habe ich auch so verstanden und bin sicher, dass jeder Andere, der den Thread mitliest, das auch verstanden hat. Es dürfen nur Kommentare darin vorkommen, keine Definitionen (und Deklarationen).

                      Kennt JavaScript eigentlich auch reine Deklarationen für Funktionen, also separierte Funktions/Methoden-Signaturen?

                      Grüße
                      TS

                      1. Aloha ;)

                        Kennt JavaScript eigentlich auch reine Deklarationen für Funktionen, also separierte Funktions/Methoden-Signaturen?

                        Sowas wäre mir nicht bekannt - und in JavaScript bin ich eigentlich ziemlich firm. Ich werds aber mal nochmal nachschlagen.

                        Die Hauptfrage und der Grund, warum es das wahrscheinlich nicht gibt ist: wozu?

                        JavaScript braucht keinem Compiler vorher mitzuteilen, was an Funktionen kommt (es ist ja eine Skriptsprache), und es ist genau eins der mächtigen Instrumente in JavaScript, dass Funktionen "on the fly" entstehen können, da sie genau wie andere Variablen behandelt werden.

                        Ein sinnvoller Grund ist dann lediglich noch die Dokumentation für Leser, die findet aber typischerweise in Kommentaren und damit sinnvoll vom ausführbaren Rest getrennt statt.

                        @Nachtrag: Eine kurze Suche hat wie erwartet nix ergeben. Typischerweise kennt man solche reinen Deklarationen ja auch von Sprachen, die feste Speichertypen und eine feste Typisierung von Variablen haben, da ist eine eigenständige Funktionsdeklaration vorab für den Compiler nötig - und auch Typisierung von Variablen ist ein Grundkonzept, das in JavaScript gerade nicht angewandt wird - mit vielen Vorteilen und einigen wenigen Nachteilen.

                        Grüße,

                        RIDER

                        --
                        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                      2. Kennt JavaScript eigentlich auch reine Deklarationen für Funktionen, also separierte Funktions/Methoden-Signaturen?

                        Du meinst Interfaces? Nein das gibt es in JavaScript nicht.

                        Würde auch wenig Sinn machen weil JavaScript dynamisch typisiert ist und Funktionen keine festen Typangaben für Parameter und Rückgabewert erlauben. Auch die Anzahl der deklarierten Parameter ist nicht bindend, man kann die Funktion problemlos mit weniger oder mehr Parametern aufrufen.

                        Simon

                  2. Hallo und guten Tag Christian,

                    Darf man denn dann im Script-Element trotzdem noch Inhalt notieren, obwohl man schon eine externe Source angegeben hat?

                    Bei HTML5 ist es verboten:

                    If there is a src attribute, the element must be either empty or contain only script documentation that also matches script content restrictions.
                    

                    Das gleiche gilt im wesentlichen für HTML4 und XHTML:

                    If the src has a URI value, user agents must ignore the element's contents and retrieve the script via the URI.
                    

                    Ich danke Dir.

                    Das sollte man in die Wiki-Seiten aufnehmen und auch Beispiele dazu angeben, was erlaubt und was verboten ist. Ich habe "eben mal gesucht" im Wiki, also mich so durchgehangelt, wie ein Fremder Click-Surfer, der da 30 Google-Links nacheinander anklickt für eine Antwort auf seine Frage "Wie bindet man externes JS in ein HTML-Dokument ein" und konnte im Self-Wiki nicht fündig werden.

                    Grüße
                    TS

                    1. Hallo TS,

                      Das sollte man in die Wiki-Seiten aufnehmen und auch Beispiele dazu angeben, was erlaubt und was verboten ist. Ich habe "eben mal gesucht" im Wiki, also mich so durchgehangelt, wie ein Fremder Click-Surfer, der da 30 Google-Links nacheinander anklickt für eine Antwort auf seine Frage "Wie bindet man externes JS in ein HTML-Dokument ein" und konnte im Self-Wiki nicht fündig werden.

                      Wer ist „man“? ;-) Aber das ist grundsätzlich ein guter Hinweis. Wenn du magst, … Ein geeigneter Platz wäre wohl http://wiki.selfhtml.org/wiki/Script

                      Bis demnächst
                      Matthias

                      --
                      Signaturen sind bloed (Steel) und Markdown ist mächtig.
                      1. Hallo und guten Tag Matthias,

                        Das sollte man in die Wiki-Seiten aufnehmen und auch Beispiele dazu angeben, was erlaubt und was verboten ist. Ich habe "eben mal gesucht" im Wiki, also mich so durchgehangelt, wie ein Fremder Click-Surfer, der da 30 Google-Links nacheinander anklickt für eine Antwort auf seine Frage "Wie bindet man externes JS in ein HTML-Dokument ein" und konnte im Self-Wiki nicht fündig werden.

                        Wer ist „man“? ;-)

                        jedenfalls noch nicht ich. Da fehlt mir noch die Sachkenntnis.

                        Aber das ist grundsätzlich ein guter Hinweis. Wenn du magst, … Ein geeigneter Platz wäre wohl http://wiki.selfhtml.org/wiki/Script

                        "Man" sollte auf jeden Fall von allen Seiten, die sich mit JavaScript beschäftigen an geeigneter Stelle einen Link auf die Verbindung "HTML <-> JavaScript" bekommnen.

                        Das könnte ggf. sogar ein eigenes Thema sein: Wie und wo darf/muss/kann JS in HTML eingebunden werden? Was wird wann aktiv? Arbeitet der Browser da beim Laden parellel (Mutlithreading) oder sequentiell?

                        Alles Fragen, die immer wieder aufkommen und in Einzelthreads auch behandelt werden, sich aber in der Doku nirgends oder nur schwer finden lassen.

                        Grüße
                        TS

                        1. @@TS

                          Das könnte ggf. sogar ein eigenes Thema sein: Wie und wo darf/muss/kann JS in HTML eingebunden werden?

                          Und auch: Wie sollte? Im head oder body? Mit async-/defer-Attributen?

                          Arbeitet der Browser da beim Laden parellel (Mutlithreading) oder sequentiell?

                          D.h.: Blockiert der Browser beim Laden der Scripte das Rendern der Seite?

                          LLAP 🖖

                          --
                          Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                        2. Hallo TS,

                          Das sollte man in die Wiki-Seiten aufnehmen und auch Beispiele dazu angeben, was erlaubt und was verboten ist. Ich habe "eben mal gesucht" im Wiki, also mich so durchgehangelt, wie ein Fremder Click-Surfer, der da 30 Google-Links nacheinander anklickt für eine Antwort auf seine Frage "Wie bindet man externes JS in ein HTML-Dokument ein" und konnte im Self-Wiki nicht fündig werden.

                          Wer ist „man“? ;-)

                          jedenfalls noch nicht ich. Da fehlt mir noch die Sachkenntnis.

                          Deine Beiträge lassen gegenteiliges vermuten.

                          Bis demnächst
                          Matthias

                          --
                          Signaturen sind bloed (Steel) und Markdown ist mächtig.
                          1. Hallo und guten Abend,

                            Wer ist „man“? ;-)

                            jedenfalls noch nicht ich. Da fehlt mir noch die Sachkenntnis.

                            Deine Beiträge lassen gegenteiliges vermuten.

                            Das ist nur Oberfläche, breit aufgestellt, aber leider nicht into the depth. Allerdings weiß ich meistens auch schon, dass ich nicht weiß - leider eben noch nicht immer.

                            Gelegentlich braucht man die solide Selbstüberschätzung aber einfach auch zum Überleben ;-)

                            Grüße
                            TS

                            1. @@TS

                              Das ist nur Oberfläche, breit aufgestellt, aber leider nicht into the depth. Allerdings weiß ich meistens auch schon, dass ich nicht weiß - leider eben noch nicht immer.

                              Dann bist du wohl Fortgeschrittener. ;-)

                              LLAP 🖖

                              --
                              Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                              1. Hallo und guten Abend,

                                Dann bist du wohl Fortgeschrittener. ;-)

                                ... und alles Wissen nur soviel taugt, wie Du verstehst, Kompetenz zu simulieren :-)

                                Grüße
                                TS

                    2. Das sollte man in die Wiki-Seiten aufnehmen und auch Beispiele dazu angeben, was erlaubt und was verboten ist. Ich habe "eben mal gesucht" im Wiki, also mich so durchgehangelt, wie ein Fremder Click-Surfer, der da 30 Google-Links nacheinander anklickt für eine Antwort auf seine Frage "Wie bindet man externes JS in ein HTML-Dokument ein" und konnte im Self-Wiki nicht fündig werden.

                      Ich hab mal 2 Links auf den bestehenden Artikel JavaScript in HTML einbinden eingefügt:

                      LG Matthias

        2. @@Christian Kruse

          Nein, man darf nicht. In XHTML ist das für script explizit verboten:
          <!ELEMENT script (#PCDATA)>

          Wie woodfighter schon sagte, hängt die Verwendung der Kurzschreibweise in X(HT)ML nicht am Inhalts­_modell_, sondern am tatsächlichen Inhalt. Man darf also die Kurzschreibweise verwenden.

          Und in XHTML5 funktioniert das auch (wenn man’s richtig macht).

          LLAP 🖖

          --
          Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
      2. Tach,

        Du kannst script nicht verkürzen, du musst <script src="test.js"></script> ausschreiben.

        Jein. Man sollte nicht. Manche Browser können damit umgehen, manche nicht.

        nö: in XHTML 1.0 ist der Wortlaut: „Given an empty instance of an element whose content model is not EMPTY (for example, an empty title or paragraph) do not use the minimized form (e.g. use <p> </p> and not <p />).“, allerdings ist das im nicht-normativen Appendix, da wäre es also im Prinzip erlaubt; aber in HTML5 ist script kein self-closing Tag und damit wird das script-Element nicht geschlossen. „/>“ wird in HTML5 als zu ignorierendes Attribut „/“ + Tagende interpretiert und bedeutet nicht das selbe wie in XML, die Wirkung ist nur bei self-closing Tags die selbe und da kann man es auch weglassen.

        mfg
        Woodfighter

    2. Hallo Leute,

      vielen Dank für die Hinweise. Es funktioniert. Es kann gut sein, dass ich noch ein paar andere Fragen stelle.

      Grüßé Christian

      Hallo Christian,

      <!DOCTYPE html>
      <html>
      <head>
      <title>Test.js</title>
      <script src="test.js"/>
      </head>
      <body>
      HALLO mnsdkfjksdlfjksdljflsdjflksdjfjsdflkjsdfkljsdfkljksdl
      </body>
      </html>
      

      Du kannst script nicht verkürzen, du musst <script src="test.js"></script> ausschreiben.

      LG,
      CK

  2. Aloha ;)

    Zuerst mal Hallo hier im Forum ;)

    Die Antwort ist ziemlich einfach: du definierst die Funktion im JavaScript, rufst sie aber nie auf. Der Aufruf kann direkt im js passieren, etwa so:

    function test() {
     alert ("test.js");
     }
    
     test();
    

    Oder wahlweise auch nach dem Laden der Seite:

    function test() {
     alert ("test.js");
     }
    
     document.body.addEventListener("load",test);
    

    Quellcode ist nicht getestet, sollte aber weiterhelfen.

    Grüße,

    RIDER

    --
    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
  3. Hallo,

    ich will mein JS in eine externe Datei einbinden und folge dem Beispiel aus dem wiki (quadrat.js).

    Magst du das Beispiel verlinken, so dass mal jemand drüber schauen kann, ob das Beispiel selbst irreführend ist?

    Gruß
    Kalk

    1. Magst du das Beispiel verlinken, so dass mal jemand drüber schauen kann, ob das Beispiel selbst irreführend ist?

      So hier ist das aktualisierte Beispiel - das alte Beispiel war 1:1 aus der alten Doku.

      JavaScript-Dateien in HTML referenzieren

      Leider funktioniert es (noch) nicht, da die Datei Quadrat.js durch media-wiki an einem anderen Ort gespeichert wurde.

      @@Matthias Apsel, dedlfix: Könnt ihr das bitte fixen?

      Vielen Dank im Voraus!

      Matthias Scharwies

      1. Tach!

        @@Matthias Apsel, dedlfix: Könnt ihr das bitte fixen?

        Erledigt.

        dedlfix.

        1. Vielen Dank!

          Matthias Scharwies