Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is a self-closing iframe tag preventing further DOM elements to be displayed?

Tags:

On Firefox and Safari, the following code displays only the first iframe

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

whereas adding the closing tag solves the issue

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

I don't understand why it does not work. When parsing the second example with DOMParser, it anyways does the transformation to self-closing iframes.

fiddle here : http://jsfiddle.net/hLcukz6p/

like image 716
Barth Avatar asked Dec 18 '14 11:12

Barth


2 Answers

Because the iframe element isn't a self-closing element. The versions of Firefox and Safari you're using are treating the /> at the end as just > and assuming everything after it is contained within the iframe.

If we attempt to pass the code you've given through W3C's validator we'll see the following errors:

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

If you inspect your document with your browser's Element Inspector, you'll see what's going on.

Chrome, which I'm using, converts the invalid <iframe ... /> to <iframe ...></iframe>:

Chrome Example

like image 52
James Donnelly Avatar answered Oct 18 '22 15:10

James Donnelly


There's no such thing as a "self-closing iframe" in HTML (or, for that matter, any other kind of self-closing tag, there are just some elements where the end tag can or must be omitted and iframe is not one of them).

You have an iframe start tag with an invalid / at the end of it.

Everything that follows is a child node of the iframe, so it treated as alternative content for browsers that don't support iframes.


XHTML supports self-closing tags, and any element may be added using one (if you aren't being HTML compatible).

HTML 5 allows for a / at the end of a start tag for an element when the end tag is omitted, but it has no effect beyond satisfying XML addiction and bad syntax highlighters.

like image 23
Quentin Avatar answered Oct 18 '22 15:10

Quentin