For example, which is the difference between these:
<iframe srcdoc="<p>Some HTML</p>"></iframe>
<iframe src="data:text/html,<p>Some HTML</p>"></iframe>
And, in case they are exactly the same, why did HTML5 add srcdoc
attribute?
Edit
Maybe I wasn't clear enough. I am not comparing src
with srcdoc
, but src
using text/html data URI with srcdoc
.
Then, if the functionality chart is like this
| src attribute | srcdoc attribute -------------------------------------------------------------------- URL | Yes | No without using src (*) HTML content | Yes, using data URI | Yes
why is srcdoc
needed?
(*) Note:
It seems srcdoc
can be used to load a page by URL (Demo), using a subiframe with src
attribute:
<iframe srcdoc="<iframe src='http://microsoft.com'></iframe>"></iframe>
From MDN :
So, the
srcdoc
attribute overrides the content embedded usingsrc
attribute.Demo
Also, what you are saying about the following snippet
data:text/html
is called Data URI and it has limitations..1. MDN, 2. MSDN
As of writing - srcdoc in Chrome (v36) allows the setting and fetching of cookies, whereas the use of src with data URL does not:
This may or may not be important to you, but rules out the use of data URLs in the application I am building, which is a shame, as of course IE doesn't support srcdoc currently (v11).
The main difference is that the 'src' attribute contains the address of the document you are going to embed in the tag.
On the other hand 'srcdoc'attribute contains the HTML content of the page to show in the inline frame.
the main disadvantage of srcdoc is that it is not supported in all browsers whereas src is compatible with all the browsers.
for detailed explanation please go through the following link: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe
srcdoc: The content of the page that the embedded context is to contain. This attribute is expected to be used together with the sandbox and seamless attributes. If a browser supports the srcdoc attribute, it will override the content specified in the src attribute (if present). If a browser does NOT support the srcdoc attribute, it will show the file specified in the src attribute instead (if present).
src: The URL of the page to embed.
Another noticeable difference is that
src
attributes with data-uri support URI percent-encoding rules whilesrcdoc
doesn't as it supports regular html syntax,these sources will yield differently:
I also noticed a difference in the parsing of js scripts inside the attributes value( it's probably more than just percentage-encoding ) but didn't figure the rule yet...
In your example the two forms are functionally identical. However, you can use both
src
andsrcdoc
attributes, allowing non-HTML5 browsers to use thesrc
version, while HTML5 browsers can use thesrcdoc
version along with thesandbox
andseamless
attributes which offer more flexibility in how an iFrame is treated.