1520 Stimmen

Warum funktionieren die selbstschließenden Skriptelemente nicht?

Was ist der Grund dafür, dass die Browser nicht richtig erkennen:

<script src="foobar.js" /> <!-- self-closing script element -->

Nur dies wird anerkannt:

<script src="foobar.js"></script>

Wird dadurch das Konzept der XHTML-Unterstützung durchbrochen?

Hinweis: Diese Aussage ist zumindest für alle IE (6-8 beta 2) korrekt.

0 Stimmen

Ich nehme an, dass Sie über richtiges XHTML sprechen? In einigen Kommentaren ist immer noch von XHTML die Rede.

16 Stimmen

Funktioniert in Chrome und Opera

0 Stimmen

Siehe auch diese Frage: stackoverflow.com/questions/348736/

29voto

Marijn Punkte 2016

Die oben genannten Personen haben das Problem bereits ziemlich genau erklärt, aber eine Sache, die die Dinge klarstellen könnte, ist, dass die Leute zwar die <br/> und dergleichen in HTML-Dokumenten ständig, jede / in einer solchen Position wird grundsätzlich ignoriert und nur verwendet, wenn versucht wird, etwas sowohl als XML als auch als HTML zu parsen. Versuchen Sie <p/>foo</p> und Sie erhalten einen normalen Absatz.

26voto

defau1t Punkte 10457

Das selbstschließende Skript-Tag wird nicht funktionieren, weil das Skript-Tag Inline-Code enthalten kann und HTML nicht intelligent genug ist, um diese Funktion auf der Grundlage eines Attributs ein- oder auszuschalten.

Andererseits gibt es in HTML einen ausgezeichneten Tag für die Aufnahme von Verweise auf externe Ressourcen: das <link> Tag, und es kann sein selbstschließend sein. Es wird bereits verwendet, um Stylesheets, RSS- und Atom Feeds, kanonische URIs und alle möglichen anderen nützlichen Dinge. Warum nicht JavaScript?

Wenn Sie möchten, dass das Skript-Tag in sich selbst geschlossen ist, können Sie das wie gesagt nicht tun, aber es gibt eine Alternative, wenn auch keine intelligente. Sie können den selbstschließenden Link-Tag verwenden und auf Ihr JavaScript verlinken, indem Sie ihm einen Typ von text/javascript und rel as script geben, etwa wie unten:

<link type="text/javascript" rel ="script" href="http://stackoverflow.com/path/tp/javascript" />

5 Stimmen

Das gefällt mir, aber warum ist es nicht "intelligent"?

5 Stimmen

Denn es gibt ein vordefiniertes Skript-Tag, das genau die Aufgabe des Ladens eines Skripts übernimmt. Warum sollten Sie die Dinge durcheinanderbringen, indem Sie etwas anderes verwenden? Ein Hammer hämmert Nägel ein.. Wäre es klug, einen Schuh zu benutzen?

11 Stimmen

@daveL - Und wir haben <style> Tags, verwenden aber Link-Tags für externe CSS-Dateien. Definition des Link-Tags: "Der <link>-Tag definiert einen Link zwischen einem Dokument und einer externen Ressource. Es scheint völlig logisch, dass der Link-Tag für externe CSS- oder JS-Dateien verwendet wird... dafür ist er da... für die Verknüpfung mit externen Dateien. Hinweis Ich spreche nicht von spec/cross-browserness/etc, ich kommentiere nur die logische Natur der Verwendung von Link-Tags für die Einbringung von CSS und JS ... es würde tatsächlich eine Menge Sinn machen, wenn es so wäre. Nicht sicher, ob der Schuh [Analogie] passt.

24voto

rpetrich Punkte 32030

Im Gegensatz zu XML und XHTML hat HTML keine Kenntnis von der selbstschließenden Syntax. Browser, die XHTML als HTML interpretieren, wissen nicht, dass die / Zeichen zeigt an, dass das Tag selbstschließend sein sollte; stattdessen wird es wie ein leeres Attribut interpretiert, und der Parser denkt immer noch, das Tag sei "offen".

Genauso wie <script defer> wird behandelt als <script defer="defer"> , <script /> wird behandelt als <script /="/"> .

36 Stimmen

So elegant diese Erklärung auch ist, so falsch ist sie in Wirklichkeit. Wenn sie wahr wäre, gäbe es ein "/"-Attribut für das Skript-Element im DOM. Ich habe IE, Firefox und Opera überprüft, und keiner von ihnen enthält tatsächlich ein solches Attribut.

12 Stimmen

/ ist kein gültiges Zeichen für einen Attributnamen, daher wird es verworfen. Ansonsten ist diese Erklärung ziemlich klar.

2 Stimmen

Tatsächlich können einige HTML-Parser (und insbesondere Validatoren) die / als Teil der NET (Null End Tag) Konstruktion.

19voto

Mike Dimmick Punkte 9542

Internet Explorer 8 und älter unterstützen nicht den richtigen MIME-Typ für XHTML, application/xhtml+xml . Wenn Sie XHTML als text/html die Sie für diese älteren Versionen des Internet Explorer verwenden müssen, um etwas zu tun, wird es als HTML 4.01 interpretiert. Sie können die kurze Syntax nur mit Elementen verwenden, bei denen der schließende Tag weggelassen werden kann. Siehe die HTML 4.01 Spezifikation .

Die XML-"Kurzform" wird als ein Attribut namens / interpretiert, das (da es kein Gleichheitszeichen gibt) als impliziter Wert "/" interpretiert wird. Dies ist in HTML 4.01 streng genommen falsch - nicht deklarierte Attribute sind nicht erlaubt -, aber die Browser ignorieren es.

IE9 und höher Unterstützung von XHTML 5 serviert mit application/xhtml+xml .

0 Stimmen

IE 9 unterstützt XHTML und IE ist nicht mehr >51%. Könnten Sie Ihre Antwort aktualisieren?

4voto

Mark Schultheiss Punkte 30349

Die einfache, moderne Antwort ist, dass die Markierung auf diese Weise als obligatorisch bezeichnet wird

Keine, sowohl die Anfangs- als auch die Endmarkierung sind obligatorisch.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

0 Stimmen

Es macht keinen Sinn, wenn ein src-Attribut angegeben ist. Aber ich schätze, es macht HTML einfacher zu parsen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X