Intereting Posts
Во время прокрутки текущий div поднимается вверх, а другой под ним (под первым фоном div) показывает почему мне нужно очистить: как в объявлении #message Специальные символы не считываются из файла JSONP правильно в IE8 Заполнение нижней части таблицы в CSS не работает Как центрировать и выравнивать по правому краю только с помощью CSS Flex Содержимое SVG foreignObject не отображается, если только обычный текст Как разрешить посетителям моего сайта делиться своими фотографиями с лентой новостей на facebook? Кнопка ввода HTML css-height не работает в Safari и Chrome с переполнением: прокрутка не ведет себя так, как ожидалось CSS – Фоновое видео кажется для увеличения Как вызвать php-код, в Javascript, если условие Получить компонент цвета из строки rgb в Javascript? Как удалить данные из базы данных с помощью переключателя в php? Позиционирование и высота не работают корректно в Firefox / IE Создание HTML-страницы на C # – Лучшие практики

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

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

  

Только это признано:

  

Разве это нарушает концепцию поддержки XHTML?

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

Спецификация XHTML 1 говорит:

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

Учитывая пустой экземпляр элемента, модель содержимого которого не является EMPTY (например, пустой заголовок или абзац), не использует минимизированную форму (например, используйте

а не

).

XHTML DTD указывает tags сценариев как:

  < !ELEMENT script (#PCDATA)> 

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

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

Из w3 :

Таким образом, «application / xhtml + xml» ДОЛЖЕН использоваться для семейных документов XHTML, а использование «text / html» ДОЛЖНО быть ограничено документами XHTML 1.0, совместимыми с HTML. «application / xml» и «text / xml» МОГУТ также использоваться, но в любом случае «application / xhtml + xml» ДОЛЖНО использоваться вместо общих типов медиафайлов.

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

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

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

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

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

 

hello

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

 

hello

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

Другие ответили «как» и цитировали спецификацию. Вот реальная история «почему нет », после долгих часов работы в отчетах об ошибках и списках рассылки.


HTML 4

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

SGML имеет некоторые shorttags , такие как
text , или

    item

. XML принимает первый вид, переопределяет окончание как «>» (SGML является гибким), поэтому он становится
.

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

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

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

Конечный тег не является необязательным .

Тег «Self-End» - это взломать HTML 4 и не имеет смысла.


HTML 5

HTML5 имеет пять типов тегов, и только tags «void» и «foreign» могут быть самозакрывающимися .

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

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

HTML 5 стремится быть обратно совместимым с реализациями HTML 4 и XHTML 1. Он не основан на SGML или XML; его синтаксис в основном связан с документированием и объединением реализаций. (Вот почему


и т. Д. Являются допустимыми HTML 5, несмотря на то, что они недействительны HTML4.)

Самозакрывающийся - это один из тегов, в которых реализации различаются. Он работал в Chrome, Safari и Opera ; Насколько мне известно, он никогда не работал в Internet Explorer или Firefox.

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

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

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


XHTML 1 / XHTML 5

Когда действительно был XHTML, действительно закрыт, как утверждают другие ответы .

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

Документы XHTML ... могут быть помечены типом интернет-медиа «text / html» [RFC2854], поскольку они совместимы с большинством браузеров HTML.

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

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

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

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

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

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

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

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

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

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

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

С другой стороны, HTML имеет отличный тег для включения ссылок на внешние ресурсы: , и он может быть самозакрывающимся. Он уже используется, чтобы включать таблицы стилей, каналы RSS и Atom, канонические URI и всевозможные другие лакомства. Почему не JavaScript?

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

  

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

Так же, как рассматривается как , рассматривается как .

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 .

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

 div { display: flex; } div + div {flex-direction: column; } 
 
Mime type:

Это потому, что SCRIPT TAG не является ЭЛЕМЕНТОМ ВОЛНЫ.

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

В xhtml все является общим, поэтому все они нуждаются в завершении, например, «закрывающий тег»; В том числе br, простой разрыв строки, as
или его сокращение
.

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

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

семантика не может быть прервана следующим

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

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

Общее завершение описания без описания Тег, подобный < /> , хватило бы для любого отдельного падения с обнаруженного каскада, например:

Title< />

но это не всегда так, потому что мы также хотим иметь возможность «вложенности» “, множественная промежуточная маркировка streamа: разбивается на торренты перед обтеканием / падением на другой каскад. Как следствие, общий терминатор, такой как < /> , не сможет определить цель для свойства, которое будет завершено. Например: жирный полужирный курсив < /> курсив нормальный. Несомненно, не получило бы нашего намерения правильно и, скорее всего, интерпретировало бы его как смелый смелый-италлический смелый нормальный.

Так родилось понятие обертки, т. Е. Контейнера. (Эти понятия настолько похожи, что невозможно различить, и иногда один и тот же элемент может иметь оба.

одновременно является оберткой и контейнером. В то время как только семантическая shell). Нам нужен простой, без семантического контейнера. И, конечно же, пришло изобретение элемента DIV.

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

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

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

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

Вот как родился xhtml и, конечно же, большой тупой, так дорого заплаченный новыми посетителями, и искаженное видение того, что есть, и какая чертовская цель. W3C отправился из World Wide Web в то, что пошло не так, товарищи? !!

objectiveю HTML является передача значимых данных получателю.

Предоставить информацию.

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

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