В чем причина некорректного распознавания браузерами:
<script src="foobar.js" /> <!-- self-closing script element -->
Распознается только это:
<script src="foobar.js"></script>
Нарушает ли это концепцию поддержки XHTML?
Примечание: Это утверждение верно, по крайней мере, для всех IE (6-8 beta 2).
Спецификация XHTML 1 гласит:
С.3. Минимизация элементов и содержимое пустых элементов
При наличии пустого экземпляра элемента, модель содержимого которого не является
EMPTY
(например, пустой заголовок или абзац), не используйте минимизированную форму (например, используйте<p> </p>
, а не<p />
).
XHTML DTD определяет элементы сценариев как:
<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>
Добавить к тому, что Брэд и squadette уже говорили, самозакрывающиеся синтаксиса XML <сценарий /&ГТ;
на самом деле это корректный XML, но для того, чтобы работать на практике, ваш веб-сервер должен отправить ваши документы Как правильно сформированный XML с XML-тип как приложение/с xhtml+xml с
в HTTP-заголовке типа контента (и не как текст/HTML
).
Однако, отправляя XML-файл типа приведет ваши страницы, чтобы не быть проанализирован ИЕ7, который любит только текст/HTML
.
От В3:
В резюме, 'заявление/с xhtml+xml и#39; &ГТ; должны быть использованы для XHTML семьи &ГТ; документы, и использовать 'текст/HTML' &ГТ; должны быть ограничены в HTML-совместимые &ГТ; документы XHTML 1.0. 'приложение/XML' > и 'текст/XML' может также использоваться, но По мере необходимости &ГТ; 'заявление/с xhtml+xml и#39; следует применять &ГТ; а не те родовые XML-медиа &ГТ; типы.
Я ломал голову над этим несколько месяцев назад, и единственный работоспособный (совместимо с ФФ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 мим. Это также, почему...
<p><div>hello</div></p>
...получает интерпретируется браузером как:
<p></p><div>hello</div><p></p>
какой рецепт для прекрасной непонятная ошибка, которая может бросить вас в подходит, как вы пытаетесь код от DOM.
&ЛТ;БР/&/
, &ЛТ;Б>текст</&ГТ;
, &ЛТ;Б/текста/
, или в <Ольга&ЛТ;ли&ГТ;пункт&ЛТ;/л.&ЛТ;/ол&ГТ;
.
В XML принимает первую форму, определяет окончание как "&ГТ;" и (SGML-это гибкая), так что она становится &ЛТ;БР/&ГТ;
.
Однако, HTML-код не redfine, так <сценарий/&ГТ;
должны среднее <сценарий&ГТ;&ГТ;
. &ЛТ;БР&ГТ;
(Да, '&ГТ;' должна быть частью содержания, а тег до сих пор не закрыта.)
Очевидно, что это несовместимо с XHTML и будет перерыв много сайтов (когда браузеры были достаточно зрелыми уход о), так что никто не реализовал shorttags]6 и спецификация советует против них.
Эффективно, все 'работает' самостоятельная состава, теги-это теги с запрещенным конечным тегом на технически несовместимой Парсеры и по сути неверный.
Он был консорциума W3C который придумал этот хак]8, чтобы помочь переход на XHTML, сделав его HTML-совместимые.
И в <сценарий>
'закрывающий тег S является не запрещено.
"по собственной заканчивая" и тег Хак в HTML 4 и бессмысленно. <сценарий> - Это не пустота (это *может* иметь содержание), а не внешней (как в 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 и рел, как сценарий, что-то вроде ниже:
<link type="text/javascript" rel ="script" href="/path/tp/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 с`.
В 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 скрывать: ложные консоли: ложные Бабеля: ложь --&ГТ;
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>
в <!-- конец фрагмента --&ГТ;
Вы должны увидеть Привет, правда с XHTML. Приятно познакомиться!
ниже текстовой области.
Для браузеров неспособны вы можете скопировать содержимое textarea и сохранить его в виде файла с .в XHTML
(или .расширением xht
) (Алек спасибо за эту подсказку).
Просто современный ответ, потому что тег обозначается как обязательное этак
и GT; тег упущение никто, как начальный и конечный тег обязателен.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script