Дополнительно
Почему не работают самозакрывающиеся элементы сценария?
В чем причина некорректного распознавания браузерами:
<script src="foobar.js" /> <!-- self-closing script element -->
Распознается только это:
<script src="foobar.js"></script>
Нарушает ли это концепцию поддержки XHTML?
Примечание: Это утверждение верно, по крайней мере, для всех IE (6-8 beta 2).
1280
12
Спецификация XHTML 1 гласит:
С.3. Минимизация элементов и содержимое пустых элементов
XHTML DTD определяет элементы сценариев как:
Добавить к тому, что Брэд и squadette уже говорили, самозакрывающиеся синтаксиса XML
<сценарий /&ГТ;
на самом деле это корректный XML, но для того, чтобы работать на практике, ваш веб-сервер должен отправить ваши документы Как правильно сформированный XML с XML-тип какприложение/с xhtml+xml с
в HTTP-заголовке типа контента (и не кактекст/HTML
).Однако, отправляя XML-файл типа приведет ваши страницы, чтобы не быть проанализирован ИЕ7, который любит только
текст/HTML
.От В3:
Я ломал голову над этим несколько месяцев назад, и единственный работоспособный (совместимо с ФФ3+ и IE7) решением было использовать старый в
<сценарий></скрипт&ГТ;
синтаксис стекст/HTML
(синтаксис html + html по умолчанию.).Если ваш сервер отправляет
текст/HTML
тип в HTTP-заголовки, даже с ином случае правильно сформированный XHTML документы, в FF3+ будет использовать свои рендеринга HTML режиме, что означает, что<сценарий /&ГТ;
работать не будет (это изменение, Firefox был ранее менее строгие).Это будет происходить независимо от каких-либо махинаций с
HTTP-экв
мета-элементов, пролог или установлен внутри документа -- в Firefox ветки после того, как он получаеттекст/HTML
Заголовок, который определяет, является ли HTML или XML парсер выглядит внутри документа и HTML-парсер не понимает<сценарий /&ГТ;
.В случае, если кто'ы любопытно, основная причина заключается в том, что HTML был изначально диалект языка SGML, который является XML's странно старший брат. В SGML-земля, элементы могут быть определены в DTD как самозакрывания (например, БР, ЛР, входные), неявно закрывающиеся (например, литий, ТД), или явно закрывающиеся (например, стол, див, сценарий). Конечно, XML имеет никакого понятия об этом.
Тег-суп парсеров используются современные браузеры эволюционировали из этого наследия, хотя их анализа модели разве'т чистого SGML и больше. И конечно тщательно продуманной XHTML-это считается плохо-написано в SGML-вдохновил тег-суп, если вы не отправить его с типом XML мим. Это также, почему...
...получает интерпретируется браузером как:
какой рецепт для прекрасной непонятная ошибка, которая может бросить вас в подходит, как вы пытаетесь код от DOM.
Другие дали ответ "как" и цитирует спецификаций. Вот реальная история "Почему нет<сценарий/&ГТ; в`", после многих часов копания в отчетах ошибок и списки рассылки.
В HTML 4 В HTML 4 основано на СОЯР. SGML имеет некоторые shorttags, такие как
&ЛТ;БР/&/
,&ЛТ;Б>текст</&ГТ;
,&ЛТ;Б/текста/
, или в<Ольга&ЛТ;ли&ГТ;пункт&ЛТ;/л.&ЛТ;/ол&ГТ;
. В XML принимает первую форму, определяет окончание как "&ГТ;" и (SGML-это гибкая), так что она становится&ЛТ;БР/&ГТ;
. Однако, HTML-код не redfine, так<сценарий/&ГТ;
должны среднее<сценарий&ГТ;&ГТ;
. &ЛТ;БР&ГТ; (Да, '&ГТ;' должна быть частью содержания, а тег до сих пор не закрыта.) Очевидно, что это несовместимо с XHTML и будет перерыв много сайтов (когда браузеры были достаточно зрелыми уход о), так что никто не реализовал shorttags]6 и спецификация советует против них. Эффективно, все 'работает' самостоятельная состава, теги-это теги с запрещенным конечным тегом на технически несовместимой Парсеры и по сути неверный. Он был консорциума W3C который придумал этот хак]8, чтобы помочь переход на XHTML, сделав его HTML-совместимые. И в<сценарий>
'закрывающий тег S является не запрещено. "по собственной заканчивая" и тег Хак в HTML 4 и бессмысленно.По HTML 5 HTML5 имеет пять типов теги и только 'пустоты' и 'и#39; теги позволено быть самозакрывающимися. Потому что в
<сценарий> - Это не пустота (это *может* иметь содержание), а не внешней (как в MathML и SVG),
<сценарий и GT;не может быть самозакрывающимися, независимо от того, как вы его используете. Но почему? Может't они расценивают это как иностранные, делают особый случай, или что-то? В HTML 5 стремится быть [совместима][13] с *реализации* в HTML 4 и XHTML 1. Он не основан на SGML или XML; его синтаксис, в основном, связаны с документированием и объединение реализаций. (Вот почему
&ЛТ;БР/&ГТ;`&ЛТ;ч/&ГТ; и т. д. являются действительными HTML 5][14] несмотря на то, что недействительные HTML4.) Самозакрывающиеся
&ЛТ;сценарий> - Это один из тегов, где реализации отличаются. Он работал в Хроме, сафари, и опера; насколько мне известно, он никогда не работал в Internet Explorer или Firefox. Об этом шла речь, когда HTML 5 была разработана и получила отказ, потому что перерывы браузер сочетаемость. Веб-страницы, самостоятельное закрытие тега script не может сделать правильно (если вообще) в старых браузерах. У меня также были и другие предложения]21, но они могут'т решить проблему совместимости либо. После того, как проект был опубликован, в WebKit обновлен парсер должен быть в соответствии. Самозакрывающаяся<сценарий и GT;
не бывает в HTML 5 из-за обратной совместимости с HTML 4 и XHTML 1.В XHTML 1 / С XHTML 5 Когда действительно подается как XHTML,
<сценарий/&ГТ;
действительно закрыт, как прочие ответы обьявили. Кроме того, что спецификации он должен работал, когда служил в HTML: &ГТ; документы XHTML ... могут быть помечены с типа Интернет-СМИ "текст/HTML" и [RFC2854], поскольку они совместимы с большинством браузеров и HTML. Итак, что случилось? Человек спросил Мозилла]24 в позволить Firefox разбор подтверждающие документы как с XHTML независимо от указанного заголовка контента (известный как нюхают содержание). Это позволило бы в любом случае самозакрывающиеся скрипты, и контент нюхают необходимо, потому что веб-хостеры не были достаточно зрелыми, чтобы служить правильный заголовок; т. е. было хорошо. Если первая война браузеров это'т конец с IE 6, XHTML может быть в списке тоже. Но она кончилась. И IE 6 есть проблема с XHTML. На самом деле т. е. не поддерживаю правильный тип MIME на всех, принуждение все, чтобы использоватьтекст/HTML
для XHTML потому что IE провела крупный рынок акций в течение целого десятилетия. А также содержание нюхают может быть очень плохой и люди говорят, что это должно быть остановлено. Наконец, оказывается, что, W3C я'т имею в виду XHTML в sniffable: документ оба, HTML и XHTML, итип содержимого
правила. Можно сказать, они были твердо стоя на "просто следите за нашими спец" и не замечают того, что практическая. Ошибка, что продолжение в дальнейшем в XHTML версии. В любом случае, это решение урегулировала вопрос для Firefox. Это было 7 лет перед хром родился; там не было никаких других существенных браузера. Таким образом было принято решение. Указав только тип документа не вызывает разбора XML из-за следующих характеристик.Internet Explorer 8 и более ранние версии не поддерживают синтаксический анализ XHTML. Даже если вы используете XML-декларацию и/или XHTML doctype, старый IE все равно будет разбирать документ как обычный HTML. А в обычном HTML синтаксис самозакрытия не поддерживается. Косая черта просто игнорируется, необходимо использовать явный закрывающий тег.
Даже браузеры с поддержкой разбора XHTML, такие как IE 9 и более поздние версии, все равно будут разбирать документ как HTML, если только вы не предоставите документ с типом содержимого XML. Но в этом случае старый IE вообще не будет отображать документ!
Люди выше уже довольно много, объяснил проблему, но одна вещь, которая может сделать вещи ясно, что, хотя люди используют
&ЛТ;БР/&ГТ; и такие все время в HTML-документах, либо
/в таком положении в основном игнорируется, и используется только тогда, когда пытается сделать что-то для анализа как XML и HTML. Попробуйте в
<Р/&ГТ;фу&ЛТ;/п&ГТ;`, например, и вы получаете регулярный пункт.Самостоятельно закрывающий тег скрипта выиграл'т работу, потому что тег script может содержать встроенный код, и HTML не достаточно умны, чтобы включить или выключить эту функцию, в зависимости от наличия атрибута.
&ГТ; с другой стороны, в HTML есть отличный тег для включения &ГТ; ссылки на внешние ресурсы: в `<ссылка> тег, и он может быть &ГТ; self-закрытия. Это's уже используется для включения стилей, RSS и Atom &ГТ; кормит, канонические URI, и всякие другие вкусности. Почему не &ГТ; в JavaScript?
Если вы хотите, чтобы тег script, чтобы быть самостоятельной в приложении вы можете'т сделать это, как я уже сказал, но есть альтернатива, хотя и не умный. Вы можете использовать закрывающиеся тег link и ссылка на ваш JavaScript, давая ему типа текст/JavaScript и рел, как сценарий, что-то вроде ниже:
В отличие от XML и XHTML, HTML не имеет представления о синтаксисе самозакрывания. Браузеры, интерпретирующие XHTML как HTML, не знают, что символ
/
указывает на то, что тег должен быть самозакрывающимся; вместо этого они интерпретируют его как пустой атрибут, и парсер по-прежнему считает тег 'открытым'.Точно так же, как
<script defer>
воспринимается как<script defer="defer">
,<script />
воспринимается как<script /="/">
.Интернет Explorer 8 и старше, Дон'т поддерживать правильный тип MIME для XHTML,
приложение/с xhtml+xml с
. Если вы'вновь выступающей в XHTML, кактекст/HTML
, который вы должны для этих старых версий Internet Explorer, чтобы сделать что-нибудь, это будет интерпретировано как HTML 4.01. Вы можете только использовать короткий синтаксис с любым элементом, что позволяет закрывающий тег должен быть опущен. См спецификация HTML 4.01.В XML 'краткая форма' интерпретируется как атрибут имени /, который (так как нет знака равенства) трактуется как неявное значение, что "/" по. Это строго неправильно в HTML 4.01 - необъявленная атрибуты не разрешено, но браузеры будут игнорировать его.
IE9 и позже поддержка XHTML 5 подается с приложением/с xhtml+xml с`.
Что's, потому что тег script-это не пустота элемент.
В HTML-документа - недействительным элементов не А "и закрывающим тегом" и вообще!
В с XHTML, все являются универсальными, поэтому их всех надо прекращении например, А "закрывающий тег", У; в том числе СП., простой разрыв строки, как
&ЛТ;БР&ГТ;&ЛТ;/БР> или его *стенография*
&ЛТ;БР /&ГТ;`.Однако, элемент script, это не пустота или параметрический элемент, потому что тег script прежде всего, это инструкция браузеру, а не заявление, описание данных.
Главным образом, семантический прекращения эксплуатации например, А "закрывающий тег" и нужна только для обработки инструкций, кто'ы семантика не может быть расторгнут последующий бирка. Например:
в
<Н1&ГТ;
семантика не может быть расторгнут по следующим&ЛТ;П&ГТ;
потому что это не'т нести достаточно своей собственной семантики, чтобы переопределить и поэтому завершить предыдущий Н1 набор команд. Хотя он сможет сломать поток в новый пункт линия, это не "силач достаточно", чтобы переопределить присутствует размер шрифта и усилитель; стиль линии-высота льет ручьем я.е протекает от H1 (потому что P не'т иметь его).Это, как и почему в "/" и (расторжении) сигнализация была изобретена.
Универсальный нет-описание прекращение тег в
< /&ГТ;
, было бы достаточно для любого отдельного упасть столкнулся каскад, например: в<Н1&ГТ;название&ЛТ; /&ГТ; но это's не всегда так, потому что мы тоже хотим быть способен на "гнездования" и несколько промежуточных меток потока: разделение на потоки перед обертыванием / падения на следующий каскад. Как следствие универсального Терминатора, такой как в
< /&ГТ;не сможет определить цель собственность прекратить. Например:
&ЛТ;б&ГТ;**жирный** в
<я> У***жирный курсив*** в
< /&ГТ;*курсив* в
</&ГТ;`нормальный. Несомненно, не получить наше намерение правильное и наиболее вероятно, интерпретировать как жирный шрифт жирный-itallic жирный нормально.Это как понятия из оболочки, т. е. контейнер родился. (Эти понятия настолько похожи, что невозможно различить, а иногда один и тот же элемент может иметь как. в
<Н1&ГТ;
является одновременно оболочкой и контейнером одновременно. В то время как `&ЛТ;Б&ГТ; только семантической оболочкой). Мы'Лл нужен простой, без контейнера семантики. И конечно изобретению элемент div пришел.Элемент div является фактически 2-комнатная-контейнер. Конечно, приход в CSS сделал все более странные ситуации, чем бы в противном случае были и вызвало большое замешательство со многими великими последствиями - косвенно!
Ведь с помощью CSS можно легко переопределить родной перед&после поведения комне недавно изобретенной div, он часто упоминается, как-то "делать нечего контейнер и quot;. Который, естественно, не так! ДИВС являются блочными элементами и непосредственно разрыв линии потока как до, так и после окончания сигнализации. Вскоре в Сети начали страдающих странице див-ИТИС. Большинство из них до сих пор.
Пришествие CSS с его способностью полностью переопределить и полностью пересмотреть собственное поведение любого HTML-тега, как-то удалось запутать и стирают весь смысл существования в формате HTML...
Вдруг все HTML-теги появились как бы устаревшие, они были испорчены, лишены всех их первоначальный смысл, сущность и цель. Как-то вы'д складывается впечатление, что они'вновь больше не нужны. Говорю: один контейнер-обертку тега будет достаточно для всех представления данных. Просто добавьте необходимые атрибуты. Почему нет вместо содержательного теги; придумывать имена тегов, как вы идете, и пусть УСБ заморачиваться с остальным.
Это как с XHTML родился и конечно великий тупой, заплатил так дорого за счет новых игроков и искаженное видение того, что есть что, и что'да, цель всего этого. Консорциум W3C вышел из Всемирной паутины, что пошло не так, товарищи?!!
Цель HTML-это поток значимые сведения для человеческого получателя.
Для доставки информации.
В официальной части есть нужно только помогать ясность предоставления информации. в XHTML не'т дать ни малейшего внимания на информацию. - К нему, информация абсолютно не имеет значения.
Самое главное в этом вопросе-это знать и уметь, чтобы понять, что XHTML-это не просто версия расширенный HTML-код, XHTML-это совершенно другой зверь; основания; и поэтому это мудрый, чтобы держать их отдельно.
Разница между 'правда в XHTML', 'искусственная с XHTML' и HTML, а также важность отправляемых сервером MIME-типом были уже описаны здесь][1]. Если вы хотите попробовать его прямо сейчас, здесь простой редактируемый фрагмент с предварительным просмотром, включая самостоятельную закрытый тег скрипт для браузера, способного:
в <!-- начинается фрагмент с JS скрывать: ложные консоли: ложные Бабеля: ложь --&ГТ;
Просто современный ответ, потому что тег обозначается как обязательное этак
и GT; тег упущение никто, как начальный и конечный тег обязателен.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script