Почему не работают самозакрывающиеся элементы скрипта?

По какой причине браузеры неправильно распознают:

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

Признается только это:

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

Нарушает ли это концепцию поддержки XHTML?

Примечание. Это утверждение верно, по крайней мере, для всех IE (6-8 beta 2).

Полагаю, вы говорите о правильном XHTML? пара комментариев все еще говорит о XHTML

squadette 16.09.2008 11:19

Работает в Chrome и Opera

corymathews 26.12.2008 20:29

Также см. Этот вопрос: stackoverflow.com/questions/348736/…

alex 09.04.2010 03:21

В некоторых последних версиях Chrome эта функция нарушена, самозакрывающиеся теги скрипта больше не работают в Chrome.

Adam Ness 24.10.2010 21:03

Это не просто теги сценария. Я также не верю, что самозакрывающиеся теги div работают.

DOK 18.03.2011 20:55

По состоянию на июль 2011 года эта проблема возникает в Chrome и Firefox. «Это не ошибка, это особенность» - очень раздражает.

Martin Konicek 24.07.2011 16:16

Самозакрывающиеся теги XHTML5

Janus Troelsen 25.06.2013 17:12

Я использую только самозакрывающиеся теги для изображений или входных данных, потому что я знаю, что остальные могут не поддерживаться в некоторых браузерах.

Gilly 05.07.2013 13:23

Двумя днями позже была задана более общая версия этого вопроса: stackoverflow.com/questions/97522/…

Ciro Santilli TRUMP BAN IS BAD 02.01.2014 01:21

Кроме того, в некоторых версиях Chrome (по крайней мере, у меня, в настоящее время 34.0.1847.116) не только сценарий в самозакрывающемся теге не загружается, но он может сломать узлы сценария, определенные в удаленных местах документа (например, <script> в <body>, даже если самозакрывающийся <script> был в <head>)

Trindaz 10.04.2014 06:16

См. Также: Подробное описание тега <script>

kenorb 15.08.2017 18:23

Спрашивали в 2008 году и до сих пор сбивают с толку людей, в том числе и меня.

willem 06.08.2019 08:07

Я думаю, что за этим вопросом стоит предположение, что XHTML - это просто хорошо сформированное подмножество HTML. Но на самом деле XML использует <foo /> для самозакрывающихся тегов на самом деле не существует в HTML. Поведение тегов определяется спецификацией HTML. Веб-браузеры уже знают, например что <img> и <br> самозакрывающиеся, а <div> и <script> - нет, поэтому они не полагаются на наличие или отсутствие /.

mwfearnley 29.09.2019 00:54

Современный справочник - компании и люди принимают участие в документировании всего этого в одном месте, Microsoft также одобрила его в будущем в качестве справочного материала для использования. developer.mozilla.org/en-US/docs/Web/HTML/Element/script

Mark Schultheiss 10.11.2019 17:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1 417
14
139 551
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Ответ принят как подходящий

Спецификация XHTML 1 гласит:

С.3. Минимизация элементов и пустое содержимое элемента

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 />).

XHTML DTD определяет элементы скрипта как:

<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>

Тем не менее, «не надо» - это не то же самое, что «не должен». Это рекомендация (для совместимости, как указано в заголовке раздела), а не правило.

Konrad Rudolph 16.09.2008 17:11

На самом деле, я не могу найти применение этому ограничению :) Это кажется совершенно искусственным.

squadette 16.09.2008 17:17

Правильный ответ дал olavk. Приложение C к XHTML 1.0 не является причиной того, почему дела обстоят так, как есть, а просто объясняет, как работать с такими вещами.

hsivonen 09.10.2008 18:36

Это не нормативная часть спецификации. Это всего лишь приложение о том, как работать с браузерами, которые не поддерживают XHTML

Kornel 16.10.2008 00:43

тем не менее, браузеры довольно хорошо понимают нотацию <p />.

shabunc 18.07.2011 13:49

Проблема с <script /> не в том, что спецификация запрещает его, а в том, что браузеры не интерпретируют его как «суп без тегов», если тип контента не application / xhtml + xml. См .: stackoverflow.com/questions/348736/… @shabunc: браузеры могут использовать появляться, чтобы понять это, но на самом деле происходит размещение содержимого после абзаца <p /> внутри из-за интерпретации цитаты squadette так, что, поскольку <p> не пуст, не может быть самозакрывающимся. В XHTML 1.1 это может является самозакрывающимся.

Joe 29.07.2011 01:07
4.3. Для непустых элементов требуются закрывающие теги - XHTML 1.0: расширяемый язык разметки гипертекста (второе издание): ... All elements other than those declared in the DTD as EMPTY must have an end tag. Elements that are declared in the DTD as EMPTY can have an end tag or can use empty element shorthand
Jeremy Kao 30.07.2018 17:29

@JeremyKao 4.3 здесь не актуален. (см. примеры) Прокрутите вниз до 4.6, чтобы найти правило, более близкое к тому, что мы обсуждаем.

James Curran 10.09.2018 23:26

Это какая-то тупая IT-бюрократия. Очевидно, нормальные люди ожидают, что это сработает / получит поддержку. Очевидно, с этим могут справиться парсеры и интерпретаторы. Или хотя бы выдать ошибку в консоли. Когда вы выполняете самозакрывающийся скрипт, вся страница не будет работать и никаких ошибок не будет. Но тогда <body onload = "start()" /> работает нормально.

Bitterblue 26.09.2019 09:51

@Bitterblue - В этом нет «бюрократии». См. Ответ Грейма для получения исторической справки о том, почему это было сделано именно таким образом. См. Ответ Джоэлхарди о том, как улучшить ситуацию, отправив другой тип MIME.

ToolmakerSteve 08.10.2019 16:41

В отличие от XML и XHTML, HTML не знает самозакрывающегося синтаксиса. Браузеры, интерпретирующие XHTML как HTML, не знают, что символ / указывает, что тег должен быть самозакрывающимся; вместо этого они интерпретируют его как пустой атрибут, а синтаксический анализатор по-прежнему считает тег «открытым».

Так же, как <script defer> рассматривается как <script defer = "defer">, <script /> рассматривается как <script / = "/">.

Каким бы элегантным ни было это объяснение, на самом деле оно неверно. Если бы это было правдой, для элемента скрипта в DOM был бы атрибут «/». Я проверил IE, Firefox и Opera, и ни один из них не содержит такого атрибута.

Alohci 22.02.2009 16:04

/ не является допустимым символом имени атрибута, поэтому он отбрасывается. В остальном это объяснение довольно ясное.

hallvors 17.08.2012 15:37

Фактически, некоторые анализаторы HTML (и особенно валидаторы) могут интерпретировать / как часть конструкции NET (Null End Tag).

IS4 08.11.2016 01:13

Internet Explorer 8 и более ранние версии не поддерживают синтаксический анализ XHTML. Даже если вы используете объявление XML и / или тип документа XHTML, старый IE по-прежнему анализирует документ как простой HTML. А в обычном HTML самозакрывающийся синтаксис не поддерживается. Завершающая косая черта просто игнорируется, вы должны использовать явный закрывающий тег.

Даже браузеры с поддержкой синтаксического анализа XHTML, такие как IE 9 и новее, все равно будут анализировать документ как HTML, если вы не обслуживаете документ с типом содержимого XML. Но в этом случае старый IE вообще не отобразит документ!

«IE не поддерживает синтаксический анализ XHTML». было верно для версий IE на момент написания, но больше не так.

EricLaw 12.08.2013 23:57

@EricLaw, можете ли вы уточнить, в какой версии IE это исправлено? (и любые особые условия - например, требуется действующий доктайп)

scunliffe 06.05.2014 02:57

@scunliffe IE9 был первой версией с полной поддержкой XHTML. blogs.msdn.com/b/ie/archive/2010/11/01/…

EricLaw 06.05.2014 17:42

Чтобы добавить к тому, что сказали Брэд и squadette, самозакрывающийся синтаксис XML <script /> на самом деле является корректирует XML, но для того, чтобы он работал на практике, вашему веб-серверу также необходимо отправлять ваши документы в виде правильно сформированного XML с mimetype XML, например application/xhtml+xml в заголовок HTTP Content-Type (и нет как text/html).

Однако отправка mimetype XML приведет к тому, что ваши страницы не будут анализироваться IE7, которому нравится только text/html.

Из w3:

In summary, 'application/xhtml+xml' SHOULD be used for XHTML Family documents, and the use of 'text/html' SHOULD be limited to HTML-compatible XHTML 1.0 documents. 'application/xml' and 'text/xml' MAY also be used, but whenever appropriate, 'application/xhtml+xml' SHOULD be used rather than those generic XML media types.

Я ломал голову над этим несколько месяцев назад, и единственным работоспособным (совместимым с FF3 + и IE7) решением было использование старого синтаксиса <script></script> с text/html (синтаксис HTML + mimetype HTML).

Если ваш сервер отправляет тип text/html в своих заголовках HTTP, даже с правильно сформированными документами XHTML, FF3 + будет использовать свой режим рендеринга HTML, что означает, что <script /> не будет работать (это изменение, Firefox ранее был менее строгим).

Это будет происходить независимо от того, как возиться с метаэлементами http-equiv, прологом XML или типом документа внутри вашего документа - Firefox разветвляется, когда получает заголовок text/html, который определяет, просматривает ли анализатор HTML или XML внутри документа, а анализатор HTML - нет. понять <script />.

Верно ли тогда заключить, что если вы откажетесь от поддержки IE7, отправка text / xml обеспечит вам широкую поддержку браузером для <script />?

Chris Moschini 10.04.2013 12:15

Короче говоря, <script /> будет работать, только если ваш MIME-тип страницы - xhtml / xml. Для обычных текстовых / html-страниц это не сработает. И если мы попытаемся использовать тип MIME «xhtml / xml», это нарушит совместимость IE. Подводя итог, сохраняйте спокойствие и используйте <script> ... </script> Спасибо, Джо ;-)

Navin Israni 09.12.2013 15:54

Отличное объяснение. Еще один момент, на который стоит обратить внимание, заключается в том, что Firefox также будет иметь локальные файлы .html, отображаемые как суп из тегов, независимо от метатегов, по аналогичным причинам. Для файлов XHTML Firefox будет отображать их соответствующим образом только в том случае, если они имеют имя .xhtml.

alecov 08.01.2015 17:19

@ChrisMoschini. Возможно, но используйте application/xhtml+xml, а не text/xml.

TRiG 04.07.2017 18:31

Internet Explorer 8 и более ранние версии не поддерживают правильный тип MIME для XHTML, application/xhtml+xml. Если вы обслуживаете XHTML как text/html, что необходимо для работы этих старых версий Internet Explorer, он будет интерпретирован как HTML 4.01. Вы можете использовать короткий синтаксис только с любым элементом, который позволяет опускать закрывающий тег. См. HTML 4.01 Спецификация.

«Краткая форма» XML интерпретируется как атрибут с именем /, который (из-за отсутствия знака равенства) интерпретируется как имеющий неявное значение «/». Это совершенно неправильно в HTML 4.01 - необъявленные атрибуты не разрешены, но браузеры проигнорируют это.

IE9 и более поздние версии поддержка XHTML 5 обслуживаются с application/xhtml+xml.

IE 9 поддерживает XHTML and IE is no longer >51%. Could you update your answer?
Damian Yerrick 13.03.2015 17:48

Вышеупомянутые люди уже в значительной степени объяснили проблему, но одна вещь, которая может прояснить ситуацию, заключается в том, что, хотя люди все время используют <br/> и тому подобное в документах HTML, любой / в такой позиции в основном игнорируется и используется только при попытке чтобы сделать что-то доступным для синтаксического анализа как XML, так и HTML. Попробуйте, например, <p/>foo</p>, и вы получите обычный абзац.

Если кому-то интересно, основная причина в том, что HTML изначально был диалектом SGML, странного старшего брата XML. В SGML-land элементы могут быть указаны в DTD как самозакрывающиеся (например, BR, HR, INPUT), неявно закрываемые (например, P, LI, TD) или явно закрывающиеся (например, TABLE, DIV, SCRIPT). XML, конечно, этого не понимает.

Парсеры tag-soup, используемые современными браузерами, развились из этого наследия, хотя их модель синтаксического анализа больше не является чистым SGML. И, конечно же, ваш тщательно созданный XHTML рассматривается как плохо написанный на основе SGML суп тегов, если вы не отправляете его с mime-типом XML. Вот почему ...

<p><div>hello</div></p>

... интерпретируется браузером как:

<p></p><div>hello</div><p></p>

... что является рецептом для прекрасной неясной ошибки, которая может привести вас в приступы припадков, когда вы попытаетесь кодировать против DOM.

Мне любопытно. почему браузер так интерпретирует это?

Ahmed Aeon Axan 30.10.2013 19:11

@AhmedAeonAxan: элемент P не может содержать элементы DIV (это недопустимый HTML), поэтому браузер неявно закрывает элемент P (определенный как «неявно закрываемый») перед открывающим тегом DIV. Однако браузеры, как правило, ведут себя по-другому в этом отношении (как и с любым недопустимым HTML).

MrWhite 04.11.2013 16:52

@ w3d Можно ли поблагодарить Netscape или IE за такой суп из тегов?

Cole Johnson 05.09.2015 20:25

@ColeJohnson Нет, это не суп из тегов; Грейм стирает границу между допустимым и недопустимым HTML. Суп из тегов - это то, что вы получаете, когда авторы не заботятся о правилах, потому что браузеры используют исправление ошибок. С другой стороны, отсутствующий конечный тег </p> на самом деле является частью определения HTML!

Mr Lister 17.12.2015 14:36

@MrLister - Вроде. «Суп из тегов» описывает, как анализируется HTML, а не как он создается. Этот термин использовался для описания разрозненных стратегий, используемых браузерами для понимания HTML, и контрастирует со строгим синтаксическим анализом XML. Синтаксический анализ XML разрешен только для типов mime XML, но, поскольку они так и не получили широкого распространения, браузеры прибегли к различным схемам «супа тегов» даже для документов, действительных во всех остальных отношениях.

greim 20.12.2015 01:17

HTML5 фактически стандартизированный синтаксический анализ «супа тегов», включая последовательный способ обработки недопустимой разметки. До этого браузеры должны были самостоятельно решать, что делать с недопустимой разметкой, что приводило к несогласованности. Анализатор HTML в современных браузерах - одна из самых передовых программ, когда-либо написанных. Невероятно быстрый и может обрабатывать практически любой ввод, обеспечивая стабильные результаты.

Stijn de Witt 09.01.2018 11:51

Тег самозакрывающегося сценария не будет работать, потому что тег сценария может содержать встроенный код, а HTML недостаточно умен, чтобы включить или выключить эту функцию в зависимости от наличия атрибута.

On the other hand, HTML does have an excellent tag for including references to outside resources: the <link> tag, and it can be self-closing. It's already used to include stylesheets, RSS and Atom feeds, canonical URIs, and all sorts of other goodies. Why not JavaScript?

Если вы хотите, чтобы тег скрипта был замкнутым, вы не можете этого сделать, как я сказал, но есть альтернатива, хотя и не разумная. Вы можете использовать тег самозакрывающейся ссылки и ссылку на свой JavaScript, задав ему тип text / javascript и rel as script, как показано ниже:

<link type = "text/javascript" rel  = "script" href = "/path/tp/javascript" />

Мне это нравится, но почему он не «умный»?

Josh M. 18.09.2013 06:05

Потому что есть предопределенный тег скрипта, который точно выполняет работу по загрузке скрипта ... Зачем вам путать вещи, используя что-то еще? Молоток забивает гвозди .. А башмаком пользоваться было бы?

Dave Lawrence 27.03.2014 19:56

@daveL - И у нас есть теги <style>, но мы используем теги ссылок для внешних файлов CSS. Определение тега ссылки: «Тег <link> определяет связь между документом и внешним ресурсом». Кажется совершенно логичным, что тег ссылки будет использоваться для внешнего CSS или JS ... вот для чего он нужен ... ссылки во внешних файлах. Примечание Я не говорю о спецификациях / кроссбраузерности и т. д., Я просто комментирую логическую природу использования тегов ссылок для ввода как CSS, так и JS ... это действительно имело бы большой смысл, если бы это было так . Не уверен, что обувь [аналогия] подходит.

Jimbo Jonny 26.01.2016 06:14

Другие ответили «как» и процитировали спец. Вот настоящая история «почему нет <script/>» после многих часов изучения отчетов об ошибках и списков рассылки.


HTML 4

HTML 4 основан на SGML.

SGML имеет некоторые короткие теги, например <BR//, <B>text</>, <B/text/ или <OL<LI>item</LI</OL>. XML принимает первую форму, переопределяет окончание как «>» (SGML гибкий), так что он становится <BR/>.

Однако HTML не обновлялся, поэтому <SCRIPT/>должен означает <SCRIPT>>.
(Да, символ '>' должен быть частью содержимого, а тег нет по-прежнему закрыт.)

Очевидно, это несовместимо с XHTML, и буду нарушает многие сайты (к тому времени, когда браузеры были достаточно зрелыми, позаботитьсяоб этом), поэтому никто не реализовал короткие теги и спецификация советует против них.

Фактически, все «рабочие» самозаверяющиеся теги являются тегами с запрещенным конечным тегом в технически несовместимых синтаксических анализаторах и фактически недействительны. Это был W3C, который придумал этот хак помог перейти на XHTML, сделав его HTML-совместимый.

Конечный тег <script> - не запрещено.

Тег «Самозавершающийся» - это взлом HTML 4, и он не имеет смысла.


HTML 5

HTML5 имеет пять типов тегов, и только теги void и foreign имеют значение разрешено самозакрываться.

Поскольку <script> не является недействительным (у него есть содержимое май) и не является чужим (например, MathML или SVG), <script> не может быть самозакрывавшимся, независимо от того, как вы его используете.

Но почему? Разве они не могут считать это чуждым, особым случаем или чем-то еще?

HTML 5 стремится быть обратно совместимый с реализации HTML 4 и XHTML 1. Он не основан на SGML или XML; его синтаксис в основном связан с документированием и объединением реализаций. (Вот почему <br/>, <hr/> и т. д. Являются действительный HTML 5, несмотря на недопустимый HTML4.)

Самозакрывающийся <script> - один из тегов, реализация которых различалась. Это раньше работал в Chrome, Safari, и опера; насколько мне известно, он никогда не работал в Internet Explorer или Firefox.

Это обсуждалось, когда HTML 5 составлялся и был отклонен, потому что это перерывыбраузерсовместимость. Веб-страницы с самозакрывающимся тегом сценария могут отображаться некорректно (если вообще) в старых браузерах. Были другие предложения, но и они не могут решить проблему совместимости.

После того, как черновик был выпущен, WebKit обновил синтаксический анализатор, чтобы он соответствовал требованиям.

Самозакрывающийся <script> не происходит в HTML 5 из-за обратной совместимости с HTML 4 и XHTML 1.


XHTML 1 / XHTML 5

Когда В самом деле используется как XHTML, <script/> действительно закрыт, как заявляет другие ответы.

За исключением того, что в спецификации говорится и должен работали, когда служили как HTML:

XHTML Documents ... may be labeled with the Internet Media Type "text/html" [RFC2854], as they are compatible with most HTML browsers.

Итак, что случилось?

Люди, соответствующие спросил Mozilla - пусть Firefox разбирает документы, как XHTML, независимо от указанного заголовка содержимого (известного как анализ контента). В любом случае это позволило бы самозакрывающимся скриптам и сниффингу контента было необходимо, потому что веб-хостеры были недостаточно зрелыми, чтобы обслуживать правильный заголовок; IE был хорош в этом.

Если первая браузерная война не заканчивался IE 6, XHTML тоже мог быть в списке. Но все закончилось. И IE 6 есть проблема с XHTML. Фактически IE не поддерживал - это правильный MIME-тип вообще, заставляющий каждый использовать text/html для XHTML, потому что IE держал основная доля рынка в течение целого десятилетия.

А также обнюхивание контента возможнодействительно плохо, и люди говорят это должно быть остановлено.

Наконец, оказывается, что W3C не означал, что XHTML можно нюхать: документ - это правила обе, HTML и XHTML, а также Content-Type. Можно сказать, что они твердо придерживались принципа «просто следуйте нашей спецификации» и игнорируя то, что было практичным. Ошибка, что продолжение в более поздних версиях XHTML.

Во всяком случае, это решение уладил вопрос для Firefox. Это было за 7 лет до Chrome родился; не было другого значимого браузера. Так было решено.

Указание одного типа документа не запускает синтаксический анализ XML из-за следующих спецификаций.

«Самозакрывающийся <script> не используется в HTML 5 из-за обратной совместимости». – this isn't really true as no aspect of backward compatibility would be broken, that is, code that has been written would still continue to work in newer browsers that supported a self-closing <script>. The real reason is that <script> would be the Только self-closing tag as HTML doesn't define any others. Also, only внешние теги are permitted to be self-closing, as недействительные теги do not have an end tag. See начальные теги, step 6.
Andy E 14.03.2015 22:41

@AndyE Когда вы пишете самозакрывающийся <script>, основные браузеры в то время не думают, что он закрыт, и будут анализировать подпоследовательность html как javascript, что приведет к поломке действительного HTML5 в этих старых браузерах. Таким образом, предложение отклоняется. Это объясняется в связанном списке рассылки HTML5.

Sheepy 16.03.2015 06:36

неясно, почему предложение было отклонено, поскольку обсуждение завершается довольно резко, хотя одной из поднятых проблем было изменение существующих браузеров новым кодом. Я просто указываю, что <script> будет уникальным как элемент HTML5, которому разрешено самозакрываться. В своем первом комментарии я имел в виду, что обратная совместимость не пострадает, потому что обратная совместимость относится к старому коду, работающему в новых браузерах, что в данном случае нормально.

Andy E 16.03.2015 14:51

@AndyE: Вы описываете прямую совместимость - способность старого кода работать с новым компилятором / интерпретатором / парсером. Обратная совместимость - это способность нового кода работать со старым компилятором / интерпретатором / парсером. Так что да, проблема была в обратной совместимости, поскольку в противном случае страницы, написанные с учетом новой спецификации, не работали бы в старых браузерах (и да, это традиция веб-программирования - стараться, чтобы новый код работал в старых браузерах, насколько это возможно).

slebetman 09.12.2015 12:25

ЕРЕСЬ! ссылка rel может работать без самозакрывания и самозакрывания, но скрипт не может. Это вопрос изменения одной строки DOCTYPE. Кроме того, я как человек, мнение которого не имеет значения, объявляю типы документов XHTML устаревшими, потому что теги html5 не подтверждают правильность xhtml. XHTML по-прежнему является фантастическим инструментом, он позволяет создавать настраиваемые сущности на html-странице, позволяя использовать сущности вместо полных URL-адресов ссылок и сущности вместо вещей, которые могут быть изменены, например, имен. Но нет причин использовать для этого XHTML doctype, он устарел и никогда не обновлялся. Почему это все еще проблема!

Dmitry 27.04.2016 04:40

@Dmitry На самом деле запрет на закрытие скрипта - это улица с односторонним движением. Поскольку связаны, самозакрывающийся <script> нарушит работу браузеров все, пользователи будут просто видеть пустую страницу - игровые консоли, Интернет-телевидение, IE 11 на корпоративном ПК Win7 новый, миллионы Среда выполнения Java или миллиарды смартфонов. Можете ли вы обновить WebView для большинства языков на большинстве устройств? Если бы HTML5 попытался это сделать, они потерпели бы неудачу, как XHTML2.

Sheepy 27.04.2016 06:12

@Sheepy Начало периода прекращения поддержки и объединение его с «крупным обновлением совместимости» было бы началом. В качестве альтернативы это может быть сделано только для воздействия на веб-страницы xhtml, таким образом, правильно сформированные веб-страницы могут отображать и то, и другое, в то время как традиционный html будет принимать только то, что он принимает сейчас. Хотя XHTML потерпел неудачу во многих областях, он все еще может способствовать улучшению написания веб-страниц для устройств, которые не привязаны к одному и только одному способу записи. Без него HTML превращается в сборку, причем тяжелую. -продолжается-

Dmitry 27.04.2016 06:26

@Sheepy HTML уже в основном рассматривается как веб-сборка, поскольку писать в нем напрямую сложно и сложно поддерживать. Его также можно заменить необработанным двоичным форматом, чтобы сэкономить еще больше места. XHTML усиливает большую часть этих проблем с помощью шаблонов, расширяемых сущностей, так что это позволяет поддерживать поддерживаемый способ написания HTML. Вместо этого большинство сайтов, которые я вижу, в основном сгенерированы, и те, которым не нужно бороться с такими устаревшими ошибками, как эта, и сложностью сохранения исходного кода, согласованного с ограничением в 80 символов на строку, без того, чтобы код выглядел беспорядочным.

Dmitry 27.04.2016 06:28

@Dmitry Эти вопросы и ответы сосредоточены на Почему, и, возможно, не подходящее место для обсуждения того, делает ли эта ошибка HTML5 устаревшим, ваша мечта о wasm для html или почему мы должны / не должны ограничивать наш код 80 символами (что я не делаю) t; и я разрабатываю эти «генераторы» HTML как свою работу).

Sheepy 27.04.2016 07:07

@Sheepy Извини, я не имел в виду сказать ничего из этого. Я не думаю, что HTML5 устарел; Я не мечтаю о wasm, я просто упоминаю о трудностях написания красивого ручного HTML; и меня очень интересует генерация HTML. Вы правы, это не тема о том, как преодолевать несоответствия в HTML, они могут быть слишком глубоко укоренившимися, чтобы их можно было решить, изменив только стандарт.

Dmitry 27.04.2016 08:13

очень недооцененный ответ

Kamil Tomšík 21.08.2016 12:28

Небольшая поправка: теги, которые в HTML работают как самозакрывающиеся, - это не теги с закрывающими тегами необязательный, а теги с закрывающими тегами запрещенный (пустые или недействительные теги). Теги с конечными тегами необязательный, такие как <p> или <li>, не могут быть `` самозакрывающимися '', поскольку они может имеют содержимое, поэтому код вроде <p/> является не чем иным, как (искаженным) начальным тегом и содержимым после него, если это разрешено. в этом элементе окажется внутри него.

Ilya Streltsyn 06.05.2017 14:56

Это потому, что SCRIPT TAG не является недействительным элементом.

В HTML-документ - VOID ELEMENTS не вообще нужен "закрывающий тег"!

В xhtml все является универсальным, поэтому им всем нужен прекращение, например. «закрывающий тег»; Включая br, простой перенос строки, например <br></br> или его стенография<br />.

Однако элемент сценария никогда не является пустым или параметрическим элементом, потому что тег скрипта прежде всего является инструкцией браузера, а не объявлением описания данных.

В принципе, инструкция семантического завершения, например «закрывающий тег», необходима только для инструкций обработки, семантика которых не может быть завершена последующим тегом. Например:

Семантика <H1> не может быть прервана следующим <P>, потому что он не несет достаточного количества собственной семантики для переопределения и, следовательно, завершения предыдущего набора инструкций H1. Хотя он сможет разбить транслировать на новую строку абзаца, он не «достаточно силен», чтобы переопределить текущий размер шрифта и высоту строки стиля льется по течению, т.е. утечку из H1 (потому что у P его нет).

Вот как и почему была изобретена сигнализация «/» (завершение).

Общего тега завершения нет описания, такого как < />, было бы достаточно для любого одиночного падения с обнаруженного каскада, например: <H1>Title< />, но это не всегда так, потому что мы также хотим иметь возможность «вложения», множественные промежуточные теги Stream: split в торренты перед накруткой / падением на другой каскад. Как следствие, универсальный терминатор, такой как < />, не сможет определить цель свойства для завершения. Например: <b>смелый<i>полужирный курсив< />курсив</>normal. Несомненно, не смог бы правильно понять наше намерение и, скорее всего, интерпретировал бы его как полужирный полужирный курсив полужирный нормально.

Так родился понятие оболочки, т. Е. Контейнера. (Эти понятия настолько похожи, что их невозможно различить, и иногда один и тот же элемент может иметь и то, и другое. <H1> одновременно является и оболочкой, и контейнером. Тогда как <B> - только семантическая оболочка). Нам понадобится простой контейнер без семантики. И, конечно же, было изобретено DIV Element.

Элемент DIV на самом деле является 2BR-контейнером. Конечно, появление CSS сделало всю ситуацию более странной, чем она могла бы быть в противном случае, и вызвало большую путаницу со многими серьезными последствиями - косвенно!

Поскольку с помощью CSS вы можете легко переопределить собственное поведение BR до и после BR недавно изобретенного DIV, его часто называют «контейнером ничего не делать». Что, естественно, неверно! DIV - это блочные элементы, которые изначально разрывают строку потока как до, так и после сигнализации конца. Вскоре WEB начал страдать от страницы DIV-itis. Большинство из них все еще есть.

Появление CSS с его способностью полностью переопределять и полностью переопределять собственное поведение любого HTML-тега каким-то образом сумело запутать и размыть весь смысл существования HTML ...

Внезапно все HTML-теги оказались устаревшими, они были искажены, лишены всего своего первоначального значения, идентичности и цели. Каким-то образом создается впечатление, что они больше не нужны. Говоря: одного тега контейнера-обертки будет достаточно для представления всех данных. Просто добавьте необходимые атрибуты. Почему бы вместо этого не использовать значимые теги; Придумывайте имена тегов по ходу дела и позвольте CSS позаботиться обо всем остальном.

Так родился xhtml и, конечно же, великий тупой, за который так дорого заплатили новички и искаженное видение того, что есть что, и какова чертова цель всего этого. W3C перешел из всемирной паутины в «Что пошло не так, товарищи?»

Назначение HTML - значимые данные стримить для человека-получателя.

Доставить информацию.

Формальная часть предназначена только для ясности доставки информации. xhtml не уделяет ни малейшего внимания информации. - К нему информация абсолютно неактуальна.

Самое главное в этом вопросе - это знать и уметь понимать, что xhtml - это не просто версия какого-то расширенного HTML, xhtml - это совсем другой зверь; основание; и, следовательно, разумно держать их отдельно.

Разница между «истинным XHTML», «поддельным XHTML» и HTML, а также важность отправленного сервером типа MIME составляла уже описано здесь хорошо. Если вы хотите попробовать это прямо сейчас, вот простой редактируемый фрагмент с предварительным просмотром в реальном времени, включая самозакрывающийся тег скрипта для совместимых браузеров:

div { display: flex; }
div + div {flex-direction: column; }
<div>Mime type: <label><input type = "radio" onchange = "t.onkeyup()" id = "x" checked  name = "mime"> application/xhtml+xml</label>
<label><input type = "radio" onchange = "t.onkeyup()" name = "mime"> text/html</label></div>
<div><textarea id = "t" rows = "4" 
onkeyup = "i.src='data:'+(x.checked?'application/xhtml+xml':'text/html')+','+encodeURIComponent(t.value)"
><?xml version = "1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[<!ENTITY x "true XHTML">]>
<html xmlns = "http://www.w3.org/1999/xhtml">
<body>
  <p>
    <span id = "greet" swapto = "Hello">Hell, NO :(</span> &x;.
    <script src = "data:text/javascript,(g=document.getElementById('greet')).innerText=g.getAttribute('swapto')" />
    Nice to meet you!
    <!-- 
      Previous text node and all further content falls into SCRIPT element content in text/html mode, so is not rendered. Because no end script tag is found, no script runs in text/html
    -->
  </p>
</body>
</html></textarea>

<iframe id = "i" height = "80"></iframe>

<script>t.onkeyup()</script>
</div>

Вы должны увидеть Hello, true XHTML. Nice to meet you! под текстовым полем.

Для неработающих браузеров вы можете скопировать содержимое текстового поля и сохранить его как файл с расширением .xhtml (или .xht) (спасибо Алек за этот намек).

Простой современный ответ заключается в том, что тег обозначен как обязательный таким образом

Tag omission None, both the starting and ending tag are mandatory.

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

Другие вопросы по теме