Подтвердить что ты не робот

Почему самозакрывающийся тег iframe предотвращает отображение дополнительных элементов DOM?

В Firefox и Safari следующий код отображает только первый iframe

<iframe src="http://www.bing.com"/>
<iframe src="http://www.tsr.ch"/>

тогда как добавление закрывающего тега решает проблему

<iframe src="http://www.bing.com"></iframe>
<iframe src="http://www.tsr.ch"></iframe>

Я не понимаю, почему это не работает. При анализе второго примера с помощью DOMParser он в любом случае преобразуется в самозакрывающиеся iframes.

скрипку здесь: http://jsfiddle.net/hLcukz6p/

4b9b3361

Ответ 1

Поскольку элемент iframe не является самозакрывающимся элементом. В версиях Firefox и Safari вы обрабатываете /> в конце как только > и принимаете все после того, как оно содержится в iframe.

Если мы попытаемся передать код, который вы указали с помощью W3C validator, мы увидим следующие ошибки:

Ошибка: самозакрывающийся синтаксис (/>), используемый для не-void HTML-элемента. Игнорирование косой черты и обработка в качестве начального тега.

<iframe src="http://www.bing.com"/>

Ошибка: Конец файла, видимый при ожидании текста или конечного тега.

</html>

Ошибка: незаблокированный элемент iframe.

<iframe src="http://www.bing.com"/>

Если вы проверите свой документ с помощью браузера Element Inspector, вы увидите, что происходит.

Chrome, который я использую, преобразует недопустимый <iframe ... /> в <iframe ...></iframe>:

Chrome Example

Ответ 2

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

У вас есть тэг iframe с недопустимым / в конце его.

Все, что следует, это дочерний node iframe, поэтому он рассматривается как альтернативный контент для браузеров, которые не поддерживают iframe.


XHTML поддерживает самозакрывающиеся теги, и любой элемент может быть добавлен с использованием одного (если вы не совместимы с HTML).

HTML 5 допускает / в конце начального тега для элемента, когда конечный тег опущен, но он не имеет эффекта, выходящего за рамки удовлетворения XML-зависимостей и слабых синтаксических маркеров.