Warum nicht selbst-schließende script-Elementen arbeiten?
Was ist der Grund, den Browser nicht richtig erkennen:
<script src="foobar.js" /> <!-- self-closing script element -->
Nur dieses erkannt wird:
<script src="foobar.js"></script>
Tut dies, brechen das Konzept der XHTML-Unterstützung?
Anmerkung: Diese Aussage ist korrekt, zumindest für alle IE (6-8 beta 2).
Funktioniert in Chrome und Opera
Einige der neuesten version von Chrome angezeigt wird, gebrochen zu haben diese, selbst-schließende script-tags nicht mehr in Chrome
Es ist nicht nur die script-tags. Ich glaube nicht, dass selbst-schließenden div-tags arbeiten.
Juli 2011, Chrome und Firefox haben dieses problem. "Es ist kein bug, es ist ein feature" - wirklich ärgerlich.
Die allgemeinere version dieser wurde gebeten, zwei Tage später: stackoverflow.com/questions/97522/...
Einige der neuesten version von Chrome angezeigt wird, gebrochen zu haben diese, selbst-schließende script-tags nicht mehr in Chrome
Es ist nicht nur die script-tags. Ich glaube nicht, dass selbst-schließenden div-tags arbeiten.
Juli 2011, Chrome und Firefox haben dieses problem. "Es ist kein bug, es ist ein feature" - wirklich ärgerlich.
Die allgemeinere version dieser wurde gebeten, zwei Tage später: stackoverflow.com/questions/97522/...
InformationsquelleAutor dimarzionist | 2008-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
XHTML 1-Spezifikation sagt:
С.3. Element-Minimierung und Leerer Element-Inhalt
XHTML-DTD gibt von script-Elementen, wie:
Eigentlich kann ich nicht finden, eine Verwendung für diese Einschränkung 🙂 Es scheint völlig künstlich.
Die richtige Antwort wurde gegeben durch olavk. Der Anhang C der XHTML 1.0 ist nicht der Grund, warum die Dinge so sind, wie Sie sind—es ist nur, wie Sie arbeiten, um die Art, wie die Dinge sind.
Es ist nicht in einem normativen Teil der Spezifikation. Es ist nur der Anhang über den Umgang mit Browsern, die das
Das problem mit
<script />
ist nicht, dass die spec verbietet es aber, dass der Browser nicht interpretieren es als "nicht-tag-Suppe", wenn der content-Typ ist nicht mit application/xhtml+xml. Siehe: stackoverflow.com/questions/348736/... @shabunc: Browser können erscheinen, um es zu verstehen, aber was tatsächlich geschieht, ist es das setzen der Inhalte nach dem <p/> inside der Absatz, durch die Interpretation squadette Zitat zu bedeuten, dass, seit <p> ist nicht leer, es kann nicht selbstschließend sein. In XHTML 1.1, es, kann selbstschließend sein.InformationsquelleAutor squadette
Hinzufügen, um das, was Brad und squadette haben gesagt, die selbst-schließende XML-syntax
<script />
eigentlich ist richtige XML, aber es funktioniert in der Praxis, Ihre web-server muss auch senden Sie Ihre Unterlagen als korrekt formatiertes XML mit XML-mimetype wieapplication/xhtml+xml
im HTTP-Content-Type-header (und nicht alstext/html
).Jedoch, das senden einer XML-mimetype führt dazu, dass Ihre Seiten nicht analysiert werden, indem IE7, die mag nur
text/html
.Vom w3:
Verwundert mich über dieses vor ein paar Monaten, und der einzige brauchbare (kompatibel mit FF3+ und IE7) Lösung war die Verwendung der alten
<script></script>
syntax mittext/html
(HTML-syntax + HTML mimetype).Wenn Ihr server sendet die
text/html
geben Sie in den HTTP-Header, selbst bei sonst richtig gebildet XHTML-Dokumente, FF3+, verwenden Sie die HTML-rendering-Modus, was bedeutet, dass<script />
wird nicht funktionieren (dies ist eine änderung, Firefox war vorher weniger streng).Dies geschieht unabhängig von jedem hantieren mit
http-equiv
meta-Elemente, die XML-prolog oder doctype in Ihrem Dokument-Firefox-Filialen einmal wird dietext/html
header, der bestimmt, ob die HTML-oder XML-parser sucht innerhalb des Dokuments, und der HTML-parser nicht versteht<script />
.Also, kurz gesagt, <script/> funktioniert nur, wenn Ihr MIME-Typ der Seite ist xhtml/xml. Für normalen text/html-Seiten funktioniert es nicht. UND wenn wir dies versuchen, verwenden Sie "xhtml/xml" MIME-Typ hat, wird es brechen IE-Kompatibilitätsmodus. Zusammenfassend ist zu sagen, Bewahren Sie Ruhe und Nutzen <script> ... </script> vielen Dank Joe 😉
Hervorragende Erklärung. Ein weiterer Punkt erwähnenswert ist, dass Firefox auch über lokale
.html
Dateien gerendert als tag-soup unabhängig von meta-tags, aus ähnlichen Gründen. Für XHTML-Dateien, Firefox wird nur machen Sie entsprechend, wenn Sie sind benannt.xhtml
.Wahrscheinlich, aber verwenden
application/xhtml+xml
, nichttext/xml
.InformationsquelleAutor joelhardi
Falls jemand neugierig, der Letzte Grund ist, dass HTML war ursprünglich ein Dialekt von SGML, ist XML ist seltsam älteren Bruder. In SGML-land, die Elemente, die angegeben werden kann, in der DTD als " self-closing (z.B. BR, HR, INPUT), implizit geschlossen (z.B. P, LI, TD), oder explizit geschlossen (z.B. TABELLE, DIV, SCRIPT). XML-natürlich hat kein Konzept.
Den tag-soup-Parser verwendet, die von modernen Browsern entwickelte sich aus diesem Erbe, obwohl Ihre Analyse-Modell ist keine Reine SGML-mehr. Und natürlich Ihre sorgfältig gestalteten XHTML behandelt wird, als schlecht geschrieben SGML-inspiriert-tag-Suppe, es sei denn, Sie senden es mit einem XML-mime-Typ. Dies ist auch der Grund, warum...
...wird vom browser interpretiert als:
...was ist das Rezept für eine schöne obskure Fehler, der werfen kann, die Sie in passt, wie Sie versuchen, code, der gegen die DOM.
Die
P
element nicht enthaltenDIV
Elemente (das ist ungültiges HTML), so dass der browser den implizit schließt denP
element (definiert als "implizit geschlossen") vor der EröffnungDIV
tag. Allerdings Browser dazu neigen, sich anders zu Verhalten in dieser Hinsicht (wie Sie tun können, mit ungültigem HTML).Nein, dies ist kein tag Suppe; greim ist muddling der Grenze zwischen gültigen und ungültigen HTML-Code. Tag Suppe ist was Sie erhalten, wenn Autoren kümmern sich nicht um die Regeln, weil Browser Fehlerkorrektur verwenden. Eine fehlende
</p>
end-tag auf der anderen Seite ist eigentlich Teil der definition von HTML!Art. "Tag-Suppe" beschreibt, wie HTML geparst wird, nicht, wie es ist, Autor zu sein. Es war ein Begriff verwendet, um zu beschreiben, disparaten Strategien verwendeten Browser, den Sinn von HTML, und steht im Gegensatz zur strengen XML-parsing. XML Parsen ist nur zulässig für einen XML-mime-Typen, aber da diese nie erreicht weit verbreiteten Einsatz, Browser fiel zurück auf den verschiedenen "tag-Suppe" - Programme, auch für ansonsten gültige Dokumente.
HTML5 eigentlich standardisierte die Analyse von "tag soup", einschließlich einer konsistenten Art und Weise zu handhaben ungültiges markup. Bis dann, Browser Art hatte, um herauszufinden, was mit invalid markup auf Ihre eigenen, verursacht Unstimmigkeiten. Der HTML-parser im Browser ist eines der modernsten Stücke software die je geschrieben wurden. Rasend schnell und kann sich mit den meisten input, produzieren konsistente Ergebnisse.
InformationsquelleAutor greim
Andere geantwortet haben, "wie" und zitiert spec. Hier ist die wahre Geschichte von "warum keine
<script/>
", nach vielen Stunden Graben in bug-reports und Mailinglisten.HTML 4
HTML 4 basiert auf SGML.
SGML hat einige shorttags, wie
<BR//
,<B>text</>
,<B/text/
oder<OL<LI>item</LI</OL>
.XML nimmt die erste form, definiert die Endung ">" SGML (flexibel), so dass es zur
<BR/>
.Allerdings HTML nicht redfine, so
<SCRIPT/>
sollte bedeuten<SCRIPT>>
.(Ja, das '>', sollte ein Teil des Inhalts, und der tag ist noch nicht geschlossen.)
Dies ist offensichtlich nicht kompatibel mit XHTML und wird brechen viele Seiten (von der Zeit, die Browser waren reif genug,Pflege über diese), so niemand umgesetzt shorttags und die Spezifikation berät gegen Sie.
Effektiv, alle "arbeiten", selbst-ended-tags sind tags mit optionalem Ende-tag auf technisch nicht-konformen Parser und sind in der Tat ungültig.
Es wurde W3C, die kam mit diesem hack zu helfen, den übergang zu XHTML, indem es HTML-kompatibel.
Sowie
<script>
's end-tag ist nicht optional."Self-Ende-tag" ist ein hack, die in HTML 4 und ist bedeutungslos.
HTML 5
HTML5 hat fünf Arten von tags und nur 'void' - und 'Fremd' - tags sind darf selbstschließend sein.
Weil
<script>
ist nicht nichtig (es kann Inhalte haben) und ist nicht Fremd (wie MathML oder SVG),<script>
nicht selbst geschlossen, unabhängig davon, wie Sie es verwenden.Aber warum? Können Sie nicht sehen es als außen -, Spezial-Fall, oder was?
HTML 5 soll rückwärts-kompatibel mit Implementierungen von HTML 4 und XHTML 1.
Es basiert nicht auf SGML oder XML; Ihre syntax ist vor allem mit der Dokumentation und Vereinigung der Implementierungen.
(Dies ist der Grund, warum
<br/>
<hr/>
etc. sind gültig HTML 5 trotz nichtig zu HTML4.)Self-closing
<script>
ist einer der tags, wo Implementierungen verwendet zu unterscheiden.Es funktioniert in Chrome, Safari, und Opera; es meines Wissens noch nie gearbeitet, im Internet Explorer oder Firefox.
Diskutiert wurde wenn HTML 5 wurde erarbeitet und abgelehnt, weil es Pausen browser Kompatibilität.
Webseiten, die selbst in der Nähe script-tag kann nicht korrekt wiedergegeben werden (wenn überhaupt) in alten Browsern.
Es wurden andere Vorschläge, aber Sie nicht lösen kann die Kompatibilität problem.
Nachdem der Entwurf wurde veröffentlicht, WebKit aktualisiert den parser werden in übereinstimmung.
Self-closing
<script>
passiert nicht in HTML 5, weil die Abwärtskompatibilität zu HTML 4 und XHTML 1.XHTML 1 /XHTML 5
Wenn wirklich diente als XHTML
<script/>
ist wirklich geschlossen, als andere Antworten angegeben haben.Außer dass die spec sagt es sollte gearbeitet haben, wenn diente als HTML:
So, was ist passiert?
Menschen gefragt Mozilla zu lassen Sie Firefox analysieren konforme Dokumente als XHTML unabhängig von den angegebenen Inhaltstyp-header (bekannt als content-sniffing).
Dieser erlaubt hätte, selbst-schließen-scripts und content-sniffing notwendig war sowieso, weil web-Hoster waren nicht reif genug, um zu dienen, den richtigen header; IE war gut.
Wenn die erste browser-Krieg am Ende nicht, mit dem IE 6, XHTML möglicherweise wurde auch auf der Liste. Aber es hat Ende. Und IE 6 ein problem hat mit XHTML.
In der Tat IE nicht unterstützt den richtigen MIME-Typ an alle, zwingt jeder Verwendung
text/html
für XHTML, weil IE hatte großen Marktanteil für ein ganzes Jahrzehnt.- Und auch content-sniffing kann wirklich schlecht und die Leute sagen,es sollte gestoppt werden.
Es stellt sich schließlich heraus, dass die W3C -nicht bedeuten, XHTML zu sein, sniffable: das Dokument ist beide, HTML und XHTML, und
Content-Type
Regeln.Man kann sagen, Sie standen fest auf "Folgen Sie einfach unserem spec" und ignorieren, was praktisch war. Ein Fehler, der weiter in späteren XHTML-Versionen.
Sowieso, diese Entscheidung erledigt die Sache für Firefox.
Es war 7 Jahre vor Chrome geboren wurde; es gab keine weiteren nennenswerten browser. So war es beschlossen.
Angabe der doctype allein macht noch nicht den Auslöser XML-parsing, weil der folgenden Spezifikationen.
es ist unklar, wie der Hauptgrund, der Vorschlag wurde abgelehnt, wie die Diskussion endet ziemlich abrupt, obwohl brechen vorhandenen Browser mit neuen Codes war eines der angesprochenen Themen. Ich bin nur darauf hin, dass
<script>
wäre einzigartig wie ein HTML5-element, das erlaubt ist, selbstschließend sein. Was ich meinte in meinem ersten Kommentar war, dass die rückwärts-Kompatibilität ist nicht verletzt, weil die Abwärtskompatibilität bezieht sich auf altem code läuft in neueren Browsern – das ist in Ordnung in diesem Fall.Was Sie beschreiben, ist vorwärts-Kompatibilität - die Möglichkeit, alten code zu arbeiten, mit neuer compiler/interpreter/parser. Abwärtskompatibilität ist die Fähigkeit, neuen code für die Arbeit mit alten compiler/interpreter/parser. Also ja, die Abwärtskompatibilität war die Frage, wie die sonst geschriebenen Seiten mit der neuen Skillung im Kopf funktioniert nicht in alten Browsern (und ja, es ist eine tradition der web-Programmierung zu versuchen und machen neue code funktioniert in alten Browsern, so viel wie möglich).
Die Realität ist, verbieten sich selbst geschlossen Skript ist eine Einbahnstraße. verknüpft, self-closed <script> brechen alle in Browsern, die Benutzer sehen einfach leere Seite - Spielekonsolen, Internet-TV, der IE 11 auf dem neuen corporate Win7 PC, Millionen von Java-runtime, oder Milliarden von smartphones. Können Sie aktualisieren die meisten WebView der die meisten Sprachen auf den meisten Geräten? Wenn HTML5 versucht, dass Sie nicht wie als Xhtml2.
sehr unterschätzte Antwort
InformationsquelleAutor Sheepy
Internet Explorer 8 und früher unterstützen nicht XHTML-parsing. Auch wenn Sie eine XML-Deklaration und/oder eine XHTML-doctype, alte IE noch parse das Dokument als plain HTML. Und in einfachem HTML, der self-closing-syntax wird nicht unterstützt. Der trailing slash wird einfach ignoriert, Sie müssen verwenden Sie ein explizites End-tag.
Sogar Browser mit Unterstützung für XHTML-parsing, wie IE 9 und höher, wird noch analysiert das Dokument als HTML, es sei denn, Sie dienen dazu das Dokument mit einem XML-content-type. Aber in diesem Fall alten IE wird nicht angezeigt, das Dokument an alle!
können Sie klären, welche version des IE behoben? (und alle besonderen Bedingungen - z.B. gültige doctype erforderlich)
IE9 war die erste version mit voller Unterstützung für XHTML. blogs.msdn.com/b/ie/archive/2010/11/01/...
InformationsquelleAutor JacquesB
Die Leute oben schon ziemlich viel erklärt das Problem, aber eins, dass vielleicht Dinge klar ist, dass, wenn Menschen nutzen
<br/>
und so die ganze Zeit in HTML-Dokumenten/
in einer solchen position ist im Grunde ignoriert, und nur verwendet werden, wenn Sie versuchen, etwas zu machen, sowohl parseable wie XML und HTML. Versuchen<p/>foo</p>
, zum Beispiel, und Sie bekommen einen regelmäßigen Absatz.InformationsquelleAutor Marijn
Den selbst schließenden script-tag nicht funktionieren, da das Skript-tag enthalten kann, die inline-code und HTML ist nicht schlau genug, zu aktivieren oder zu deaktivieren, die Funktion basiert auf dem Vorhandensein eines Attributs.
Wenn Sie möchten, dass das script-tag selbst eingeschlossen, die Sie nicht tun können, da ich gesagt habe, aber es ist eine alternative, wenn auch nicht smart. Sie können verwenden Sie die selbst-schließende link-tag und link zu Ihrer JavaScript, indem es eine Art text/javascript und rel Skript, so etwas wie unten:
Denn es gibt eine vordefinierte script-tag ausführen genau die Aufgabe laden eines Skripts.. Warum würde Sie verwirren Angelegenheiten über etwas anderes? Ein hammer Hämmer die Nägel.. Wäre es klug, zu verwenden, ein Schuh?
Und wir haben
<style>
tags, noch link-tags für externe CSS-Dateien. Definition von link-tag: "<link> tag definiert eine Verknüpfung zwischen einem Dokument und einer externen Ressource." Scheint vollkommen logisch, dass der link-tag verwendet werden würde, für eine externe CSS-oder JS...das ist das, was es ist...die Verknüpfung in externe Dateien. Hinweis: ich spreche nicht spec/cross-browserness/etc, ich bin nur kommentieren, die logische Natur der Verwendung von link-tags für die Mitnahme von CSS-und JS...eigentlich es würde sehr viel Sinn machen, wenn es auf diese Weise. Nicht, dass der Schuh [Analogie] passt.InformationsquelleAutor defau1t
Im Gegensatz zu XML und XHTML, HTML hat keine Kenntnis von der self-closing-syntax. Browser interpretieren, dass XHTML als HTML-wissen nicht, dass die
/
Zeichen zeigt an, dass der tag sollte selbstschließend sein; stattdessen interpretieren Sie es, wie ein leeres Attribut und der parser immer noch denkt, dass der tag "geöffnet" ist.Nur als
<script defer>
behandelt wird, als<script defer="defer">
,<script />
behandelt wird, als<script /="/">
./ ist kein gültiges Attribut-name Charakter, so ist es verworfen. Ansonsten wird diese Erklärung ist ziemlich klar.
Tatsächlich, einige HTML-Parser (und vor allem Prüfungen) interpretieren, die
/
als Teil der NET (Null-End-Tag) Konstruktion.InformationsquelleAutor rpetrich
Internet Explorer 8 und älter unterstützen nicht die richtigen MIME-Typ für XHTML
application/xhtml+xml
. Wenn Sie serving-XHTML alstext/html
, die Sie haben, um für diese älteren Versionen von Internet Explorer nichts zu tun, es wird interpretiert als HTML 4.01. Sie können nur die kurz-syntax jedes element, das erlaubt, das schließende tag weggelassen werden. Finden Sie die HTML-4.01-Spezifikation.Den XML 'short form' interpretiert wird, als ein Attribut mit dem Namen /(da Sie nicht-gleich-Zeichen) interpretiert wird, als mit einem impliziten Wert von "/". Das ist strikt falsch im HTML-4.01 - nicht deklarierte Attribute sind nicht zulässig - aber Browser ignorieren es.
IE9 und höher Unterstützung von XHTML 5 serviert mit
application/xhtml+xml
.InformationsquelleAutor Mike Dimmick
Das ist, weil die SCRIPT-TAG ist keine LEERE ELEMENT.
In einem HTML-Dokument - VOID-ELEMENTE nicht brauchen eine "End-tag" an alle!
In xhtml, alles ist Generisch, daher müssen Sie alle Kündigung z.B. eine "End-tag"; Darunter br, ein einfacher Zeilenumbruch, wie
<br></br>
oder seine Kürzel<br />
.Allerdings ein Script-Element ist niemals eine Lücke oder ein Parametrisches Element, weil script-tag, bevor irgendetwas anderes, ist ein Browser-Unterricht, nicht eine Daten-Beschreibung-Erklärung.
Prinzipiell eine Semantische Kündigung Anweisung z.B. ein "End-tag" wird nur benötigt für die Verarbeitung von Anweisungen, die die Semantik kann nicht beendet werden durch einen nachfolgenden tag. Zum Beispiel:
<H1>
Semantik nicht durch eine Beendigung folgenden<P>
weil es nicht genug eigene Semantik außer Kraft zu setzen und daher die Kündigung des vorherigen H1-Befehlssatz. Obwohl es in der Lage sein zu brechen, die stream in einem neuen Absatz, Zeile, es ist nicht "stark genug" zu überschreiben, die Gegenwart font-size & style line-height Gießen den Strom hinab, ich.e Austritt aus H1 (weil P nicht hat).Dies ist, wie und warum die "/" (Kündigung) signalisiert wurde erfunden.
Einen generischen keine Beschreibung Kündigung Tag wie
< />
, hätte ausgereicht, um jeden einzelnen fall aus den aufgetretenen Kaskade, z.B.:<H1>Title< />
aber das ist nicht immer der Fall, denn wir wollen auch in der Lage sein, "Schachteln", mehrere Vermittler Markierung der Stream: aufgeteilt in torrents vor dem Umbruch /fallen auf einen anderen Kaskaden. Als Folge einer generischen terminator wie< />
wäre nicht in der Lage, um zu bestimmen, das Ziel einer Immobilie zu beenden. Zum Beispiel:<b>
Fett<i>
Fett-Kursiv< />
Kursiv</>
normal. Wäre sicherlich nicht unsere Absicht die Rechte und würde wahrscheinlich so interpretieren Fett Fett-itallic Fett normal.Dies ist, wie die Begriff - wrapper ie., der container war geboren. (Diese Begriffe sind sich so ähnlich, dass es unmöglich ist, zu erkennen, und manchmal das gleiche element kann sowohl.
<H1>
ist sowohl wrapper und container zur gleichen Zeit. In der Erwägung, dass<B>
nur eine semantische wrapper). Wir benötigen eine Ebene, keine Semantik-container. Und natürlich ist die Erfindung eines DIV-Elements kam.Das DIV-element ist eigentlich ein 2-Schlafzimmer-Container. Natürlich die kommen mit CSS gemacht die ganze situation etwas unheimlich, als es sonst gewesen wäre, und verursacht eine große Verwirrung bei vielen großen Folgen - indirekt!
Da mit CSS könnte man leicht überschreiben Sie die Muttersprache vor&nach BR Verhalten eines neu erfunden DIV, ist es oft genannt wird, als "nichts tun-container". Das ist natürlich falsch! DIVs sind block-Elemente und wird nativ break the line im stream vor und nach dem Ende-Signalisierung. Bald das WEB begann das leiden von Seite DIV-itis. Die meisten von Ihnen immer noch sind.
Den kommenden CSS mit seiner Fähigkeit, vollständig außer Kraft setzen und ganz neu zu definieren das native Verhalten von einem HTML-Tag, es irgendwie geschafft zu verwirren und zu verwischen, die ganze Bedeutung der HTML-Existenz...
Plötzlich alle HTML-tags erschien, als ob veraltet, Sie wurden unkenntlich gemacht, ohne Ihre ursprüngliche Bedeutung, Identität und Zweck. Irgendwie würden Sie den Eindruck gewinnen, dass Sie nicht mehr benötigt werden. Sprichwort: Ein einziger container-wrapper-tag würde genügen, für alle in der Präsentation von Daten. Fügen Sie einfach die gewünschten Attribute. Warum nicht sinnvollen tags statt; Erfinden tag-Namen, wie Sie gehen und lassen Sie die CSS-Mühe mit dem rest.
Dies ist, wie xhtml geboren wurde und natürlich die große stumpf, bezahlt so sehr durch neue Ankömmlinge und eine verzerrte vision von dem, was ist, was, und was ist der verdammte Sinn des ganzen. W3C ging aus dem World Wide Web zu dem, Was Falsch gelaufen ist, Kameraden?!!
Den Zweck von HTML ist streamen aussagekräftige Daten zu den menschlichen Empfänger.
Informationen zur Verfügung zu stellen.
Dem formellen Teil wird es nur helfen, die Klarheit für die Bereitstellung von Informationen.
xhtml gibt nicht die geringste Rücksicht genommen auf die Informationen. - Es werden die Informationen absolut irrelevant.
Das wichtigste bei der Sache ist, zu wissen und in der Lage sein zu verstehen, dass xhtml ist nicht nur eine version einige erweiterte HTML -, xhtml ist ein völlig anderes Tier; Gründe; und daher ist es ratsam, halten Sie Sie getrennt.
InformationsquelleAutor Bekim Bacaj