<iframe>中srcdoc ="..."和src ="data:text/html,..."之间的区别是什么?

Ori*_*iol 64 html iframe

例如,这些之间的区别是:

<iframe srcdoc="<p>Some HTML</p>"></iframe>
<iframe src="data:text/html,<p>Some HTML</p>"></iframe>
Run Code Online (Sandbox Code Playgroud)

演示

而且,如果它们完全相同,为什么HTML5会添加srcdoc属性?

编辑

也许我不够清楚.我不是比较srcsrcdoc,但src使用text/html的数据URI用srcdoc.

然后,如果功能图是这样的

                   |  src attribute       |  srcdoc attribute
 --------------------------------------------------------------------
  URL              |  Yes                 |  No without using src (*)
  HTML content     |  Yes, using data URI |  Yes

为什么srcdoc需要?


(*)注意:

它似乎srcdoc可以用来通过URL(Demo)加载页面,使用带有src属性的子图:

<iframe srcdoc="<iframe src='http://microsoft.com'></iframe>"></iframe>
Run Code Online (Sandbox Code Playgroud)

Fab*_*ini 39

其他答案列出了一些表面上的差异,但真的错过了关键差异的标记,这解释了为什么浏览器/规范编写者基本上会复制已经存在的东西:

<iframe src="data:...untrusted content" sandbox />< - 在现代浏览器中安全,在没有沙箱支持的旧版浏览器中不安全

<iframe srcdoc="...untrusted content" sandbox />< - 在现代浏览器中安全,在传统浏览器中安全(尽管不起作用)

这种新语法为内容作者提供了一种保护用户的方法,即使他们可能正在使用旧版浏览器.如果没有它,内容作者根本不愿意使用沙箱功能,也不会使用它.


Mr.*_*ien 18

来自MDN:

1.嵌入式上下文要包含的页面内容.此属性应与沙箱和无缝属性一起使用.如果浏览器支持srcdoc属性,它将覆盖src属性中指定的内容(如果存在).如果浏览器不支持srcdoc属性,它将显示src属性中指定的文件(如果存在).

因此,该srcdoc属性会覆盖使用src属性嵌入的内容.

演示


另外,您对以下代码段的说法data:text/html称为数据URI,它有局限性.

2.数据URI不能大于32,768个字符.

1. MDN,2.MSDN

  • 该数据 URI 限制是真实的吗?HTMLCanvasElement.toDataURL 定期返回大于 32k 的 dataURL (3认同)
  • @MrAlien 关于数据 URI 长度限制的好点,不像 html 属性[没有限制](http://stackoverflow.com/questions/1496096/is-there-a-limit-to-the-length-of- html 属性)。无论如何,似乎限制是由 Microsoft 实现强加的,因为 [MDN](https://developer.mozilla.org/en-US/docs/data_URIs) 没有提及任何有关限制的内容,并且 [RFC 标准] (http://tools.ietf.org/html/rfc2397) 仅表示“*请注意,某些使用 URL 的应用程序可能会施加长度限制*” (2认同)

小智 14

src具有HTML内容属性的iframe 是跨域的,

但是srcDoc具有HTML内容属性的iframe 不是跨域

  • 这是一个好点,Chrome将数据URI视为跨域.Firefox将它们视为同源,不确定Edge的作用. (2认同)
  • “不能跨域”是什么意思? (2认同)
  • @GregoryMagarshak“不是跨域”,这意味着 iframe 内容将被视为来自与父页面相同的域。因此,它不会受到浏览器同源策略的限制,浏览器同源策略通常会阻止浏览器访问远程页面的内容,就像使用 src='some-url.com' 时一样。https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy (2认同)

wom*_*ine 13

在编写时 - Chrome中的srcdoc(v36)允许设置和获取cookie,而使用带有数据URL的src则不:

Uncaught SecurityError:无法从'Document'读取'cookie'属性:在'data:'URL中禁用Cookie

这可能对您来说很重要,也可能不重要,但排除了我正在构建的应用程序中数据URL的使用,这是一种耻辱,因为IE当然不支持srcdoc(v11).


mai*_*man 5

另一个明显的区别是srcdata-uri属性支持URI百分比编码规则,srcdoc但不支持常规html语法,

这些来源将产生不同的结果:

<iframe srcdoc="<p>hello%20world</p><h1>give%0D%0Ame%0D%0Asome%24</h1>"></iframe>

<iframe src="data:text/html;charset=UTF-8,<p>hello%20datauri<p><h1>give%0D%0A me%0D%0Asome%24</h1>"></iframe>
Run Code Online (Sandbox Code Playgroud)

我还注意到属性值内的js脚本解析有所不同(它可能不只是百分比编码),但还没有弄清楚规则……


R R*_*R R -4

主要区别在于“src”属性包含要嵌入标签中的文档的地址。

另一方面,“srcdoc”属性包含要在内联框架中显示的页面的 HTML 内容。

srcdoc 的主要缺点是并非所有浏览器都支持它,而 src 与所有浏览器兼容。

有关详细说明,请访问以下链接: https ://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

  • 但是 `src` 属性也可以使用数据 URI 包含页面的 HTML 内容 (9认同)

归档时间:

查看次数:

39678 次

最近记录:

8 年,9 月 前