2014-12-18 2 views
13

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

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

+0

IFrames не являются самозакрывающимися. Поведение по дизайну. Если DOMParser делает это по-другому, он не следует стандартным –

+0

iframes и скрипты не поддерживают формат самозакрывания. Раздражаю, я знаю. Это HTML для вас :( – oriadam

ответ

22

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

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

Error: Self-closing syntax (/>) used on a non-void HTML element. Ignoring the slash and treating as a start tag.

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

Error: End of file seen when expecting text or an end tag.

</html> 

Error: Unclosed element iframe .

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

Если вы проверяете ваш документ с вашим браузером Element Inspector, вы увидите, что происходит ,

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

Chrome Example

+1

Браузер не игнорирует символ '>'. Это все еще отмечает конец стартового тега. – Quentin

+0

@Quentin хорошая точка! Модифицировано. –

+0

Спасибо за ваш ответ. Это имеет смысл. правильный закрытый тег. Что происходит, так это то, что я храню этот html в базе данных, и как только я его извлекаю, я использую DOMParser. DOMParser, к сожалению, преобразует действительный код в недопустимый формат. – Barth

6

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

У вас есть iframe стартовый тег с недействительным / в конце его.

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


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

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

Смежные вопросы