Inni odpowiedzieli „jak” i zacytowali specyfikację. Oto prawdziwa historia „dlaczego nie <script/>
” po wielu godzinach zagłębiania się w raporty o błędach i listy mailingowe.
HTML 4
HTML 4 jest oparty na SGML .
SGML ma pewne shorttags , takie jak <BR//
, <B>text</>
, <B/text/
, lub <OL<LI>item</LI</OL>
. XML przyjmuje pierwszą formę, redefiniuje końcówkę jako „>” (SGML jest elastyczny), dzięki czemu staje się <BR/>
.
Jednak HTML nie zmienił definicji, więc <SCRIPT/>
powinno to znaczyć <SCRIPT>>
.
(Tak, „>” powinno być częścią treści, a tag nadal nie jest zamknięty).
Oczywiście jest to niezgodne z XHTML i spowoduje uszkodzenie wielu witryn (do czasu, gdy przeglądarki będą wystarczająco dojrzałe, aby się tym przejmować ), więc nikt nie wdrożył shorttagów, a specyfikacja odradza .
W efekcie wszystkie „działające” samozakończone znaczniki są znacznikami z zabronionym znacznikiem końcowym w parserach niezgodnych pod względem technicznym i są w rzeczywistości nieprawidłowe. To W3C wymyślił ten hack, aby pomóc przejść do XHTML, dzięki czemu jest kompatybilny z HTML .
I <script>
„s tag końcowy nie jest zakazane .
Tag „Self-ending” to hack w HTML 4 i jest bez znaczenia.
HTML 5
HTML5 ma pięć typów znaczników i tylko tagi „void” i „obcych” mogą być samozamykające .
Ponieważ <script>
nie jest nieważny ( może mieć treść) i nie jest obcy (jak MathML lub SVG), <script>
nie może być samozamykający się, niezależnie od tego, jak go używasz.
Ale dlaczego? Czy nie mogą uznać go za obcy, zrobić specjalny przypadek czy coś takiego?
HTML 5 ma być kompatybilny wstecz z implementacjami HTML 4 i XHTML 1. Nie jest oparty na SGML ani XML; jego składnia dotyczy głównie dokumentowania i łączenia implementacji. (Właśnie dlatego <br/>
<hr/>
itd. Są poprawne HTML 5, mimo że są nieprawidłowe HTML4.)
Samozamykanie <script>
jest jednym ze znaczników, w których implementacje były różne. Jest wykorzystywany do pracy w Chrome, Safari , Opera i ; według mojej wiedzy nigdy nie działał w Internet Explorerze ani Firefoxie.
Zostało to omówione podczas opracowywania HTML 5 i zostało odrzucone, ponieważ narusza kompatybilność przeglądarki . Strony internetowe, które zamykają się automatycznie, mogą nie wyświetlać się poprawnie (jeśli w ogóle) w starych przeglądarkach. Były też inne propozycje , ale nie mogą też rozwiązać problemu ze zgodnością.
Po wydaniu wersji roboczej WebKit zaktualizował analizator składni, aby był zgodny.
Samozamykanie <script>
nie występuje w HTML 5 z powodu wstecznej kompatybilności z HTML 4 i XHTML 1.
XHTML 1 / XHTML 5
Gdy naprawdę służy jako XHTML, <script/>
jest naprawdę zamknięty, jak podają inne odpowiedzi .
Z wyjątkiem tego, że specyfikacja mówi, że powinna była działać, gdy jest serwowana jako HTML:
Dokumenty XHTML ... mogą być oznaczone etykietą Internet Media Type „text / html” [RFC2854], ponieważ są one kompatybilne z większością przeglądarek HTML.
Więc co się stało?
Ludzie prosili Mozillę, aby Firefox parsowała dokumenty zgodne ze standardem XHTML bez względu na określony nagłówek treści (znany jako wąchanie zawartości ). Pozwoliłoby to na samozamykające się skrypty, a wąchanie zawartości było i tak konieczne, ponieważ hosty internetowe nie były wystarczająco dojrzałe, aby wyświetlać poprawny nagłówek; IE był w tym dobry .
Jeśli pierwsza wojna przeglądarki nie zakończyła się na IE 6, XHTML mógł być również na liście. Ale to się skończyło. I IE 6 ma problem z XHTML. W rzeczywistości IE nie wspiera prawidłowy typ MIME w ogóle , zmuszając wszystkich do korzystania text/html
z XHTML, ponieważ IE odbyła poważny udział w rynku na całe dziesięciolecia.
A także wąchanie treści może być naprawdę złe, a ludzie mówią, że należy go zatrzymać .
Wreszcie okazuje się, że W3C nie oznaczało, że XHTML może być wąchany : dokumentem jest zarówno HTML, jak i XHTML oraz Content-Type
reguły. Można powiedzieć, że zdecydowanie „po prostu przestrzegaj naszej specyfikacji” i ignorując to, co było praktyczne . Pomyłka, że kontynuowane w późniejszych wersjach XHTML.
W każdym razie ta decyzja rozstrzygnęła sprawę dla Firefoksa. Minęło 7 lat, zanim narodził się Chrome ; nie było innej znaczącej przeglądarki. Tak postanowiono.
Samo określenie typu dokumentu nie powoduje analizowania XML ze względu na następujące specyfikacje.