1. 4.8.5 iframe 元素
      2. 4.8.6 embed 元素
      3. 4.8.7 object 元素

4.8.5 iframe 元素

元素/iframe

所有当前引擎都支持。

Firefox1+Safari4+Chrome1+
Opera15+Edge79+
Edge (旧版)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android14+

HTMLIFrameElement

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+
类别:
流动内容.
短语内容.
嵌入内容.
交互式内容.
可感知内容.
可以使用此元素的上下文:
在预期 嵌入内容 的地方。
内容模型:
.
在 text/html 中的标签省略:
两个标签都不能省略。
内容属性:
全局属性
src — 资源地址
srcdoc — 要在 iframe 中渲染的文档
name内容可导航 的名称
sandbox — 嵌套内容的安全规则
allow — 要应用于 iframe 内容的 权限策略
allowfullscreen — 是否允许 iframe 的内容使用 requestFullscreen()
width — 水平尺寸
height — 垂直尺寸
referrerpolicy — 元素发起的 获取推荐者策略
loading — 用于确定加载延迟
无障碍性注意事项:
面向作者.
面向实现者.
DOM 接口:
[Exposed=Window]
interface HTMLIFrameElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions] attribute USVString src;
  [CEReactions] attribute (TrustedHTML or DOMString) srcdoc;
  [CEReactions] attribute DOMString name;
  [SameObject, PutForwards=value] readonly attribute DOMTokenList sandbox;
  [CEReactions] attribute DOMString allow;
  [CEReactions] attribute boolean allowFullscreen;
  [CEReactions] attribute DOMString width;
  [CEReactions] attribute DOMString height;
  [CEReactions] attribute DOMString referrerPolicy;
  [CEReactions] attribute DOMString loading;
  readonly attribute Document? contentDocument;
  readonly attribute WindowProxy? contentWindow;
  Document? getSVGDocument();

  // also has obsolete members
};

iframe 元素 表示内容可导航

src 属性提供页面 URL,元素的 内容可导航 将包含该页面。如果存在,则该属性必须是 有效的非空 URL,可能被空格包围。如果在 iframe 元素上指定了 itemprop 属性,则也必须指定 src 属性。

元素/iframe#attr-srcdoc

所有当前引擎都支持。

Firefox25+Safari6+Chrome20+
Opera?Edge79+
Edge (旧版)?Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android?

srcdoc 属性提供页面内容,元素的 内容可导航 将包含该内容。该属性的值用于 构建 iframe srcdoc 文档,这是一个 Document,其 URL about:srcdoc 匹配

如果存在,则 srcdoc 属性必须具有一个使用 HTML 语法 的值,该值由以下语法组件组成,按给定顺序排列

  1. 任意数量的 注释ASCII 空白
  2. 可选地,一个 DOCTYPE
  3. 任意数量的 注释ASCII 空白
  4. html 元素 形式存在的 文档元素
  5. 任意数量的 注释ASCII 空白

上述要求也适用于 XML 文档

这里,一个博客使用 srcdoc 属性与下面描述的 sandbox 属性结合使用,为支持此功能的用户代理的用户提供额外的保护层,以防止博客文章评论中的脚本注入。

<article>
 <h1>I got my own magazine!</h1>
 <p>After much effort, I've finally found a publisher, and so now I
 have my own magazine! Isn't that awesome?! The first issue will come
 out in September, and we have articles about getting food, and about
 getting in boxes, it's going to be great!</p>
 <footer>
  <p>Written by <a href="/users/cap">cap</a>, 1 hour ago.
 </footer>
 <article>
  <footer> Thirteen minutes ago, <a href="/users/ch">ch</a> wrote: </footer>
  <iframe sandbox srcdoc="<p>did you get a cover picture yet?"></iframe>
 </article>
 <article>
  <footer> Nine minutes ago, <a href="/users/cap">cap</a> wrote: </footer>
  <iframe sandbox srcdoc="<p>Yeah, you can see it <a href=&quot;/gallery?mode=cover&amp;amp;page=1&quot;>in my gallery</a>."></iframe>
 </article>
 <article>
  <footer> Five minutes ago, <a href="/users/ch">ch</a> wrote: </footer>
  <iframe sandbox srcdoc="<p>hey that's earl's table.
<p>you should get earl&amp;amp;me on the next cover."></iframe>
 </article>

注意引号必须转义的方式(否则 srcdoc 属性将过早结束),以及在沙盒内容中提到的原始和号(例如,在 URL 或散文中)必须双重转义的方式 — 一次用于在最初解析 srcdoc 属性时保留和号,以及再次防止在解析沙盒内容时错误解释和号。

此外,请注意,由于 DOCTYPEiframe srcdoc 文档 中是可选的,并且 htmlheadbody 元素具有 可选的开始和结束标签,以及 title 元素在 iframe srcdoc 文档 中也是可选的,因此,srcdoc 属性中的标记可以相对简洁,尽管它代表了整个文档,因为只需要 body 元素的内容在语法中直接出现。其他元素仍然存在,但只是隐含地存在。

HTML 语法 中,作者只需要记住使用 U+0022 引号字符 (") 来包装属性内容,然后转义所有 U+0026 和号 (&) 和 U+0022 引号字符 ("),并指定 sandbox 属性,以确保安全嵌入内容。(请记住,在引号之前转义和号,以确保引号变为 &quot; 而不是 &amp;quot;。)

在 XML 中,U+003C 小于号字符 (<) 也需要转义。为了防止 属性值规范化,一些 XML 的空格字符 — 特别是 U+0009 制表符 (tab)、U+000A 换行符 (LF) 和 U+000D 回车符 (CR) — 也需要转义。 [XML]

如果同时指定了 src 属性和 srcdoc 属性,则 srcdoc 属性优先。这允许作者为不支持 srcdoc 属性的旧版用户代理提供备用 URL


给定 insertedNodeiframe HTML 元素插入步骤

  1. 如果 insertedNode阴影包含根浏览上下文 为 null,则返回。

  2. insertedNode 创建一个新的子级可导航

  3. 如果 insertedNode 具有 sandbox 属性,则 解析沙盒指令,该指令给定属性的值和 insertedNodeiframe 沙盒标志集

  4. insertedNode 处理 iframe 属性,并将 initialInsertion 设置为 true。

给定 removedNodeiframe HTML 元素移除步骤销毁子可导航元素 相同,同样需要 removedNode

这种情况发生时不会触发任何 unload 事件(元素的 内容文档销毁,而不是 卸载)。

尽管 iframe阴影树 中进行处理,根据以上内容,其行为的几个其他方面在阴影树方面没有得到很好的定义。有关更多详细信息,请参阅 问题 #763

只要具有非空 内容可导航元素iframe 元素的 srcdoc 属性被设置、更改或移除,用户代理必须 处理 iframe 属性

类似地,只要具有非空 内容可导航元素 但未指定 srcdoc 属性的 iframe 元素的 src 属性被设置、更改或移除,用户代理必须 处理 iframe 属性

处理元素 elementiframe 属性,可以使用可选布尔值 initialInsertion(默认值为 false)

  1. 如果 elementsrcdoc 属性已指定,则

    1. element当前导航是否为延迟加载 布尔值设置为 false。

    2. 如果给定 element将延迟加载元素步骤 返回 true,则

      1. element延迟加载恢复步骤 设置为从标记为 导航到 srcdoc 资源 的步骤开始的此算法的其余部分。

      2. element当前导航是否为延迟加载 布尔值设置为 true。

      3. element 开始对延迟加载元素进行交叉观察

      4. 返回。

    3. 导航到 srcdoc 资源:给定 elementabout:srcdoc、空字符串以及 elementsrcdoc 属性的值,导航 iframeframe

      生成的 Document 必须被视为 iframe srcdoc 文档

  2. 否则

    1. url 设置为给定 elementinitialInsertioniframeframe 元素的共享属性处理步骤 的结果。

    2. 如果 url 为 null,则返回。

    3. 如果 url 匹配 about:blankinitialInsertion 为 true,则

      1. 运行给定 elementiframe 加载事件步骤

      2. 返回。

    4. referrerPolicy 设置为 elementreferrerpolicy 内容属性的当前状态。

    5. element当前导航是否为延迟加载 布尔值设置为 false。

    6. 如果给定 element将延迟加载元素步骤 返回 true,则

      1. element延迟加载恢复步骤 设置为从标记为 导航 的步骤开始的此算法的其余部分。

      2. element当前导航是否为延迟加载 布尔值设置为 true。

      3. element 开始对延迟加载元素进行交叉观察

      4. 返回。

    7. 导航:给定 elementurlreferrerPolicy导航 iframeframe

给定元素 element 和布尔值 initialInsertioniframeframe 元素的共享属性处理步骤

  1. url 设置为 URL 记录 about:blank

  2. 如果 element 指定了 src 属性,且其值不是空字符串,则

    1. maybeURL 设置为给定该属性的值相对于 element节点文档编码解析 URL 的结果。

    2. 如果 maybeURL 不是失败,则将 url 设置为 maybeURL

  3. 如果 element节点可导航元素包含的祖先可导航元素 包含一个其 活动文档URL 等于 url排除片段 设置为 true)的可导航元素,则返回 null。

  4. 如果 url 匹配 about:blankinitialInsertion 为 true,则执行给定 element内容可导航元素活动文档urlURL 和历史记录更新步骤

    如果 url 类似于 about:blank?foo,则这是必需的。如果 url 只是简单的 about:blank,则此步骤将不执行任何操作。

  5. 返回 url

导航给定元素 elementiframeframe,可以使用 URL url引用者策略 referrerPolicy 以及可选的字符串或 null srcdocString(默认值为 null)

  1. historyHandling 设置为 "auto"。

  2. 如果 element内容可导航元素活动文档完全加载,则将 historyHandling 设置为 "replace"。

  3. 如果 elementiframe,则将 element挂起资源计时开始时间 设置为给定 element节点文档相关全局对象当前高分辨率时间

  4. 使用 element节点文档 导航 element内容可导航元素url,其中 historyHandling 设置为 historyHandlingreferrerPolicy 设置为 referrerPolicy 以及 documentResource 设置为 srcdocString

每个 Document 都有一个 iframe 加载进行中 标志和一个 静音 iframe 加载 标志。当创建 Document 时,必须为该 Document 取消设置这些标志。

要运行给定 iframe 元素 elementiframe 加载事件步骤

  1. 断言element内容可导航元素 不为 null。

  2. childDocument 设置为 element内容可导航元素活动文档

  3. 如果 childDocument静音 iframe 加载 标志已设置,则返回。

  4. 如果 element挂起资源计时开始时间 不为 null,则

    1. global 设置为 element节点文档相关全局对象

    2. fallbackTimingInfo 设置为一个新的 获取计时信息,其 开始时间element挂起资源计时开始时间,其 响应结束时间 为给定 global当前高分辨率时间

    3. 给定 fallbackTimingInfourl、"iframe"、global、空字符串、一个新的 响应主体信息 以及 0,标记资源计时

    4. element挂起资源计时开始时间 设置为 null。

  5. 设置 childDocumentiframe 加载进度 标志。

  6. element触发一个事件,名为 load

  7. 取消设置 childDocumentiframe 加载进度 标志。

这与脚本结合使用,可以用来探测本地网络 HTTP 服务器的 URL 空间。用户代理可能实现 跨域 访问控制策略,这些策略比上面描述的策略更严格,以减轻这种攻击,但不幸的是,这些策略通常与现有的 Web 内容不兼容。

如果元素类型 可能延迟 load 事件,则对于该类型的每个元素 element,用户代理必须 延迟 element节点文档 的 load 事件,如果 element内容可导航 不为空,并且以下任一条件为真:

如果在处理 load 事件期间,element内容可导航 再次被 导航,这将进一步 延迟 load 事件

每个 iframe 元素都与一个关联的 当前导航是懒加载的 布尔值相关联,最初为 false。它在 处理 iframe 属性 算法中设置和取消设置。

一个 iframe 元素,其 当前导航是懒加载的 布尔值为 false,可能延迟 load 事件

每个 iframe 元素都与一个空或 DOMHighResTimeStamp 挂起的资源计时开始时间 相关联,最初设置为 null。

如果在创建元素时,srcdoc 属性未设置,并且 src 属性也未设置,或者已设置但其值无法 解析,则元素的 内容可导航 将保留在 初始 about:blank Document 中。

如果用户从该页面 导航 离开,则 iframe内容可导航活动 WindowProxy 对象将代理新的 Window 对象,用于新的 Document 对象,但 src 属性不会改变。


name 属性(如果存在)必须是一个 有效的可导航目标名称。如果存在,则使用给定值来命名元素的 内容可导航,当它被 创建 时。


Element/iframe#attr-sandbox

所有当前引擎都支持。

Firefox17+Safari5+Chrome4+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

sandbox 属性在指定时,会对 iframe 托管的任何内容启用一组额外的限制。它的值必须是 一组唯一的空格分隔的标记的无序集,这些标记是 ASCII 不区分大小写 的。允许的值是

当属性设置时,内容被视为来自一个唯一的 不透明的来源,表单、脚本和各种可能令人讨厌的 API 被禁用,并且链接被阻止针对其他 可导航allow-same-origin 关键字会导致内容被视为来自其真实来源,而不是强制将其置于 不透明的来源 中; allow-top-navigation 关键字允许内容 导航可遍历的可导航allow-top-navigation-by-user-activation 关键字的行为类似,但仅当浏览上下文的 活动窗口瞬态激活 时才允许这种 导航allow-top-navigation-to-custom-protocols 重新启用针对非 提取方案 的导航,以 传递给外部软件;以及 allow-formsallow-modalsallow-orientation-lockallow-pointer-lockallow-popupsallow-presentationallow-scripts,以及 allow-popups-to-escape-sandbox 关键字分别重新启用表单、模态对话框、屏幕方向锁定、指针锁定 API、弹出窗口、演示 API、脚本和创建未沙盒化的 辅助浏览上下文allow-downloads 关键字允许内容执行下载。 [POINTERLOCK] [SCREENORIENTATION] [PRESENTATION]

allow-top-navigationallow-top-navigation-by-user-activation 关键字不能同时指定,因为这样做是多余的;只有 allow-top-navigation 在这种不符合标准的标记中有效。

类似地,如果指定了 allow-top-navigationallow-popups,则不能指定 allow-top-navigation-to-custom-protocols 关键字,因为这样做是多余的。

要允许 alert()confirm()prompt() 在沙盒内容中,需要同时指定 allow-modalsallow-same-origin 关键字,并且加载的 URL 需要与 顶级来源 同源。如果没有 allow-same-origin 关键字,内容始终被视为跨域,而跨域内容 无法显示简单的对话框

当嵌入的页面与包含 iframe 的页面具有 同源 时,同时设置 allow-scriptsallow-same-origin 关键字,允许嵌入的页面简单地删除 sandbox 属性,然后重新加载自身,从而有效地完全摆脱沙盒。

这些标志仅在 iframe 元素的 内容可导航导航 时才生效。删除它们,或删除整个 sandbox 属性,对已加载的页面没有影响。

不应该将潜在的恶意文件与包含iframe 元素的文件从同一个服务器提供。如果攻击者能够说服用户直接访问恶意内容,而不是在iframe 中,沙箱化恶意内容的帮助微乎其微。为了限制恶意 HTML 内容造成的损害,它应该从一个单独的专用域提供。使用不同的域可以确保文件中的脚本无法攻击网站,即使用户被诱骗直接访问这些页面,也无法获得sandbox 属性的保护。

当一个iframe 元素的sandbox 属性被设置或改变时,它具有一个非空的content navigable,用户代理必须解析沙箱指令,给出属性的值和iframe 元素的iframe 沙箱标志集

当一个iframe 元素的sandbox 属性被移除时,它具有一个非空的content navigable,用户代理必须清空iframe 元素的iframe 沙箱标志集

在这个例子中,一些完全未知的、潜在的恶意、用户提供的 HTML 内容被嵌入到一个页面中。因为它来自一个单独的域,所以它受到所有正常的跨站点限制的影响。此外,嵌入的页面禁用了脚本,禁用了插件,禁用了表单,并且它不能导航任何框架或窗口,除了它自己(或它自己嵌入的任何框架或窗口)。

<p>We're not scared of you! Here is your content, unedited:</p>
<iframe sandbox src="https://usercontent.example.net/getusercontent.cgi?id=12193"></iframe>

使用一个单独的域很重要,这样,如果攻击者说服用户直接访问该页面,页面就不会在网站原点的上下文中运行,这将使用户容易受到页面中任何攻击的攻击。

在这个例子中,一个来自另一个网站的小工具被嵌入。该小工具启用了脚本和表单,并且原点沙箱限制被解除,允许该小工具与其源服务器通信。然而,沙箱仍然有用,因为它禁用了插件和弹出窗口,从而降低了用户暴露于恶意软件和其他烦人内容的风险。

<iframe sandbox="allow-same-origin allow-forms allow-scripts"
        src="https://maps.example.com/embedded.html"></iframe>

假设文件 A 包含以下片段

<iframe sandbox="allow-same-origin allow-forms" src=B></iframe>

假设文件 B 也包含一个 iframe

<iframe sandbox="allow-scripts" src=C></iframe>

此外,假设文件 C 包含一个链接

<a href=D>Link</a>

对于这个例子,假设所有文件都以text/html 的形式提供。

在这种情况下,页面 C 设置了所有沙箱标志。脚本被禁用,因为 A 中的iframe禁用了脚本,并且这会覆盖在 B 中的iframe 上设置的allow-scripts 关键字。表单也被禁用,因为内部iframe(在 B 中)没有设置allow-forms 关键字。

现在假设 A 中的脚本删除了 A 和 B 中的所有sandbox 属性。这不会立即改变任何东西。如果用户点击了 C 中的链接,将页面 D 加载到 B 中的iframe 中,页面 D 现在将表现得好像 B 中的iframe 设置了allow-same-originallow-forms 关键字,因为这是加载页面 B 时 A 中iframecontent navigable 的状态。

一般来说,动态删除或更改sandbox 属性是不明智的,因为它会使推理什么允许什么变得非常困难。


当指定allow 属性时,它会确定容器策略,该策略将在初始化iframecontent navigable 中的Document权限策略 时使用。它的值必须是序列化权限策略[PERMISSIONSPOLICY]

在这个例子中,一个iframe 用于嵌入来自在线导航服务的地图。allow 属性用于在嵌套上下文中启用地理定位 API。

<iframe src="https://maps.example.com/" allow="geolocation"></iframe>

allowfullscreen 属性是一个布尔属性。当指定它时,它表示iframe 元素的content navigable 中的Document 对象将使用允许从任何原点 使用 "fullscreen" 特性的权限策略 初始化。这是由进程权限策略属性 算法强制执行的。 [PERMISSIONSPOLICY]

在这里,一个iframe 用于嵌入来自视频网站的播放器。allowfullscreen 属性是必要的,以使播放器能够全屏显示其视频。

<article>
 <header>
  <p><img src="/usericons/1627591962735"> <b>Fred Flintstone</b></p>
  <p><a href="/posts/3095182851" rel=bookmark>12:44</a><a href="#acl-3095182851">Private Post</a></p>
 </header>
 <p>Check out my new ride!</p>
 <iframe src="https://video.example.com/embed?id=92469812" allowfullscreen></iframe>
</article>

如果iframe 元素的content navigable节点文档 不允许使用该特性,那么allowallowfullscreen 都不能授予对iframe 元素的content navigable 中的特性访问权限。

要确定Document 对象document 是否允许使用 策略控制的特性feature,请执行以下步骤

  1. 如果document浏览上下文 为 null,则返回 false。

  2. 如果document 不是完全活动的,则返回 false。

  3. 如果在document 上对featuredocumentdocument原点 运行在文档中为原点启用特性 的结果为 "Enabled",则返回 true。

  4. 返回 false。

因为它们只影响content navigable活动文档权限策略,所以allowallowfullscreen 属性只在iframecontent navigable导航 时生效。添加或删除它们对已经加载的文档没有影响。


iframe 元素支持尺寸属性,用于嵌入内容具有特定尺寸的情况(例如,广告单元具有明确定义的尺寸)。

iframe 元素永远不会有后备内容,因为它总是创建一个新的子导航,而不管指定的初始内容是否成功使用。


referrerpolicy 属性是一个推荐人策略属性。它的目的是在处理iframe 属性 时设置推荐人策略[REFERRERPOLICY]

loading 属性是一个延迟加载属性。它的目的是指示加载视窗之外的iframe 元素的策略。

loading 属性的状态更改为Eager 状态时,用户代理必须执行以下步骤

  1. resumptionStepsiframe 元素的延迟加载恢复步骤

  2. 如果resumptionSteps 为 null,则返回。

  3. iframe延迟加载恢复步骤 设置为 null。

  4. 调用resumptionSteps


iframe 元素的后代不代表任何东西。(在不支持iframe 元素的旧版用户代理中,内容将被解析为可以充当后备内容的标记)。

HTML 解析器iframe 元素中的标记视为文本。


HTMLIFrameElement/src

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

IDL 属性 srcnamesandboxallow 必须 反映 相同名称的相应内容属性。

HTMLIFrameElement/srcdoc

所有当前引擎都支持。

Firefox25+Safari6+Chrome20+
Opera?Edge79+
Edge (旧版)?Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

srcdoc 获取器的步骤是

  1. attribute 为运行 根据命名空间和本地名称获取属性 给定的 null、srcdoc本地名称this 所产生的结果。

  2. 如果 attribute 为 null,则返回空字符串。

  3. 返回 attribute

srcdoc 设置器的步骤是

  1. compliantString 为调用 获取可信类型兼容字符串 算法,传入 TrustedHTMLthis相关全局对象、给定值、"HTMLIFrameElement srcdoc" 和 "script" 所产生的结果。

  2. 设置属性值 给定的 thissrcdoc本地名称compliantString

sandboxDOMTokenList支持的标记 是在 sandbox 属性中定义的,并由用户代理支持的允许值。

allowFullscreen IDL 属性必须 反映 allowfullscreen 内容属性。

HTMLIFrameElement/referrerPolicy

所有当前引擎都支持。

Firefox50+Safari14+Chrome52+
Opera?Edge79+
Edge (旧版)?Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

referrerPolicy IDL 属性必须 反映 referrerpolicy 内容属性,仅限于已知值

loading IDL 属性必须 反映 loading 内容属性,仅限于已知值

HTMLIFrameElement/contentDocument

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer8+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

contentDocument 获取器的步骤是返回 this内容文档

HTMLIFrameElement/contentWindow

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera8+Edge79+
Edge (旧版)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

contentWindow 获取器的步骤是返回 this内容窗口

以下是一个使用 iframe 来包含来自广告代理的广告的网页示例

<iframe src="https://ads.example.com/?customerid=923513721&amp;format=banner"
        width="468" height="60"></iframe>

4.8.6 embed 元素

Element/embed

所有当前引擎都支持。

Firefox1+Safari4+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLEmbedElement

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
类别:
流动内容.
短语内容.
嵌入内容.
交互式内容.
可感知内容.
可以使用此元素的上下文:
在预期 嵌入内容 的地方。
内容模型:
.
在 text/html 中的标签省略:
没有 结束标记
内容属性:
全局属性
src — 资源的地址
type — 嵌入资源的类型
width — 水平尺寸
height — 垂直尺寸
任何没有命名空间的其他属性(见本文)。
无障碍性注意事项:
面向作者.
面向实现者.
DOM 接口:
[Exposed=Window]
interface HTMLEmbedElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions] attribute USVString src;
  [CEReactions] attribute DOMString type;
  [CEReactions] attribute DOMString width;
  [CEReactions] attribute DOMString height;
  Document? getSVGDocument();

  // also has obsolete members
};

embed 元素提供了一个外部应用程序或交互式内容的集成点。

src 属性给出了正在嵌入的资源的 URL。该属性,如果存在,必须包含一个 有效的非空 URL,可能被空格包围

如果 itemprop 属性在 embed 元素上指定,则 src 属性也必须指定。

type 属性,如果存在,给出用于选择要实例化的插件的 MIME 类型。该值必须是一个 有效的 MIME 类型字符串。如果 type 属性和 src 属性都存在,则 type 属性必须指定与由 src 属性给出的资源的 显式 Content-Type 元数据 相同的类型。

在以下任何条件正在发生时,为元素实例化的任何 插件 必须被移除,并且 embed 元素 代表 任何东西。

如果同时满足以下条件,则称一个 embed 元素为 潜在活跃

无论何时一个原本不是 潜在活跃embed 元素变成 潜在活跃,无论何时一个 潜在活跃embed 元素保持 潜在活跃,并且其 src 属性被设置、更改或移除,或者其 type 属性被设置、更改或移除,用户代理必须 在给定元素的 embed 任务源 上排队一个元素任务,以便为该元素运行 embed 元素设置步骤

embed 元素设置步骤 对于给定的 embed 元素 element 如下所示

  1. 如果另一个 任务 已被排队以运行 embed 元素设置步骤 针对 element,则返回。

  2. 如果 element 设置了 src 属性,则

    1. url对 URL 进行编码解析 所产生的结果,传入 elementsrc 属性的值,相对于 element节点文档

    2. 如果 url 为失败,则返回。

    3. request 为一个新的 请求,其 URLurl客户端element节点文档相关设置对象目标 为 "embed",凭据模式 为 "include",模式 为 "navigate",发起方类型 为 "embed",并且其 使用 URL 凭据标志 已设置。

    4. 获取 request,并将 processResponse 设置为给定 响应 response 的以下步骤。

      1. 如果另一个 任务 随后已排队运行 embed 元素设置步骤 用于 element,则返回。

      2. 如果 response网络错误,则 触发一个名为 load 的事件,在 element 上,并返回。

      3. type 为给定 elementresponse 后确定 内容类型 的结果。

      4. 根据 type 的值执行以下操作。

        null
        1. 显示无插件 用于 element

        否则
        1. 如果 element内容可导航 为 null,则 element 创建一个新的子可导航

        2. 导航 element内容可导航responseURL,使用 element节点文档,并将 响应 设置为 response,并将 historyHandling 设置为 "replace"。

          elementsrc 属性不会更新,如果 内容可导航 进一步导航到其他位置。

        3. element 现在 代表内容可导航

      获取资源必须 延迟 element节点文档 的 load 事件。

  3. 否则,显示无插件 用于 element

要确定给定 embed 元素 element响应 response内容类型,请运行以下步骤。

  1. 如果 element 有一个 type 属性,并且该属性的值是 插件 支持的类型,则返回 type 属性的值。

  2. 如果 response路径 组件匹配 插件 支持的模式,则返回该插件可以处理的类型。

    例如,一个插件可能表示它可以处理以四个字符字符串 ".swf" 结尾的 路径 组件的 URL。

  3. 如果 response显式 Content-Type 元数据,并且该值是 插件 支持的类型,则返回该值。

  4. 返回 null。

上述算法允许 response 具有非 ok 状态 是故意的。这允许服务器即使在错误响应的情况下,也为插件返回数据(例如,HTTP 500 内部服务器错误代码仍然可以包含插件数据)。

embed 元素 element 显示无插件

  1. 销毁给定 element 的子可导航

  2. 显示一个指示,即无法为 element 找到 插件,作为 element 的内容。

  3. element 现在 代表 任何内容。

embed 元素没有 备用内容;其后代将被忽略。

每当 embed 元素,它曾 可能处于活动状态,停止 可能处于活动状态,任何已为该元素实例化的 插件 必须被卸载。

embed 元素 可能延迟 load 事件

embed 元素支持 尺寸属性

IDL 属性 srctype 必须分别 反映 同名内容属性。

4.8.7 object 元素

元素/对象

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera?Edge79+
Edge (旧版)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLObjectElement

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
类别:
流动内容.
短语内容.
嵌入内容.
已列出 与表单关联的元素
可感知内容.
可以使用此元素的上下文:
在需要 嵌入内容 的地方。
内容模型:
透明.
在 text/html 中的标签省略:
两个标签都不能省略。
内容属性:
全局属性
data — 资源地址
type — 嵌入资源类型
name内容可导航 的名称
form — 将元素与 form 元素关联
width — 水平尺寸
height — 垂直尺寸
无障碍性注意事项:
面向作者.
面向实现者.
DOM 接口:
[Exposed=Window]
interface HTMLObjectElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions] attribute USVString data;
  [CEReactions] attribute DOMString type;
  [CEReactions] attribute DOMString name;
  readonly attribute HTMLFormElement? form;
  [CEReactions] attribute DOMString width;
  [CEReactions] attribute DOMString height;
  readonly attribute Document? contentDocument;
  readonly attribute WindowProxy? contentWindow;
  Document? getSVGDocument();

  readonly attribute boolean willValidate;
  readonly attribute ValidityState validity;
  readonly attribute DOMString validationMessage;
  boolean checkValidity();
  boolean reportValidity();
  undefined setCustomValidity(DOMString error);

  // also has obsolete members
};

根据 object 元素实例化的内容类型,节点还支持其他接口。

object 元素可以表示外部资源,该资源根据资源类型,将被视为图像或 子可导航

data 属性指定资源的 URL。它必须存在,并且必须包含一个 有效的非空 URL,可能被空格包围

type 属性,如果存在,则指定资源的类型。如果存在,属性必须为 有效的 MIME 类型字符串

name 属性,如果存在,必须为 有效的可导航目标名称。给定的值用于命名元素的 内容可导航(如果适用),并且如果在元素的 内容可导航创建 时存在。

每当以下条件之一发生时

...用户代理必须在DOM 操作任务源排队一个元素任务,并提供object 元素以运行以下步骤,以(重新)确定object 元素代表什么。这个任务排队或正在运行必须延迟元素的节点文档的 load 事件。

  1. 如果用户已经表明了他们希望显示此object 元素的备用内容,而不是元素的正常行为,则跳到下面标记为“备用”的步骤。

    例如,用户可能会要求显示元素的备用内容,因为该内容使用了一种用户认为更容易访问的格式。

  2. 如果元素有一个祖先媒体元素,或者有一个祖先object 元素没有显示其备用内容,或者如果元素不在一个文档中,该文档的浏览上下文不为空,或者如果元素的节点文档没有完全激活,或者如果元素仍在HTML 解析器XML 解析器打开元素堆栈中,或者如果元素没有渲染,则跳到下面标记为“备用”的步骤。

  3. 如果data 属性存在且其值不是空字符串,则

    1. 如果type 属性存在且其值不是用户代理支持的类型,则用户代理可以在不获取内容以检查其实际类型的情况下,跳到下面标记为“备用”的步骤。

    2. url 为通过编码解析 URL(相对于元素的节点文档)获得的结果,该结果使用data 属性的值。

    3. 如果url 为失败,则触发一个名为error 的事件,并在元素上跳到下面标记为“备用”的步骤。

    4. request 为一个新的请求,其URLurl客户端 为元素的节点文档相关设置对象目标 为"object",凭据模式 为"include",模式 为"navigate",启动类型 为"object",并且其使用 URL 凭据标志 已设置。

    5. 获取 request

      获取资源必须延迟元素的节点文档的 load 事件,直到任务(由网络任务源在资源被获取后(在下面定义)排队)运行。

    6. 如果资源尚不可用(例如,因为资源在缓存中不可用,因此加载资源需要通过网络发出请求),则跳到下面标记为“备用”的步骤。任务(由网络任务源在资源可用后排队)必须从该步骤重新启动此算法。资源可以增量加载;用户代理可以选择在获得足够的数据开始处理资源时,将资源视为“可用”。

    7. 如果加载失败(例如,出现 HTTP 404 错误,出现 DNS 错误),触发一个名为error 的事件,并在元素上跳到下面标记为“备用”的步骤。

    8. 确定资源类型,如下所示

      1. 资源类型 为未知。

      2. 如果用户代理配置为严格遵守此资源的 Content-Type 标头,并且资源具有关联的 Content-Type 元数据,则设资源类型资源的 Content-Type 元数据中指定的类型,并跳到下面标记为“处理程序”的步骤。

        这可能会引入漏洞,其中一个站点试图嵌入使用特定类型的资源,但远程站点覆盖该类型,而是向用户代理提供触发不同类型内容的资源,这些内容具有不同的安全特性。

      3. 从以下列表中运行适当的步骤集

        如果资源具有关联的 Content-Type 元数据
        1. binary 为 false。

        2. 如果资源的 Content-Type 元数据中指定的类型为"text/plain",并且将区分资源是文本还是二进制的规则应用于资源的结果是资源不是text/plain,则将binary 设置为 true。

        3. 如果资源的 Content-Type 元数据中指定的类型为"application/octet-stream",则将binary 设置为 true。

        4. 如果binary 为 false,则设资源类型资源的 Content-Type 元数据中指定的类型,并跳到下面标记为“处理程序”的步骤。

        5. 如果object 元素上存在type 属性,并且其值不是application/octet-stream,则运行以下步骤

          1. 如果属性的值是以"image/" 开头的类型,并且该类型也不是XML MIME 类型,则设资源类型 为该type 属性中指定的类型。

          2. 跳到下面标记为“处理程序”的步骤。

        否则,如果资源没有关联的 Content-Type 元数据
        1. 如果object 元素上存在type 属性,则设暂定类型 为该type 属性中指定的类型。

          否则,设暂定类型资源的计算类型

        2. 如果暂定类型 不是application/octet-stream,则设资源类型暂定类型 并跳到下面标记为“处理程序”的步骤。

      4. 如果将URL 解析器算法应用于指定资源的URL(经过任何重定向)的结果,得到一个URL 记录,其路径 组件与插件支持的模式匹配,则设资源类型 为该插件可以处理的类型。

        例如,插件可能会说它可以处理路径 组件以四个字符字符串".swf" 结尾的资源。

      此步骤有可能完成,或者上面的一个子步骤可能直接跳到下一步,而资源类型 仍然未知。在这两种情况下,下一步都会触发备用。

    9. 处理程序:根据以下匹配的第一个情况处理内容

      如果资源类型XML MIME 类型,或者如果资源类型 不以"image/" 开头

      如果object 元素的内容可导航 为 null,则为元素创建一个新的子可导航

      response响应,来自获取

      如果 responseURL 不与 about:blank 匹配,则使用元素的 节点文档 将元素的 内容可导航 导航到 responseURL,并将 historyHandling 设置为 "replace"。

      如果 内容可导航 进一步被导航到其他位置,则 data 属性不会被更新。

      object 元素 表示内容可导航

      如果 资源类型 以 "image/" 开头,并且图像支持没有被禁用

      使用给定的 object 元素 销毁子导航

      应用 图像嗅探 规则来确定图像的类型。

      object 元素 表示 指定的图像。

      如果图像无法渲染,例如由于图像格式错误或不支持的格式,则跳到下面标记为 *回退* 的步骤。

      否则

      给定的 资源类型 不受支持。跳到下面标记为 *回退* 的步骤。

      如果上一步以 资源类型 未知结束,则会触发这种情况。

    10. 元素的内容不是 object 元素表示的一部分。

    11. 如果 object 元素不表示其 内容可导航,则在资源完全加载后,使用给定的 object 元素在 DOM 操作任务源排队一个元素任务,以 触发一个名为 load 的事件。

      如果元素 *确实* 表示其 内容可导航,则在创建的 Document 完全完成加载 时,将排队一个类似的任务。

    12. 返回。

  4. 回退: object 元素 表示 元素的子元素。这是元素的 回退内容。使用元素 销毁子导航

由于上面的算法,object 元素的内容充当 回退内容,仅在引用的资源无法显示时使用(例如,由于它返回了 404 错误)。这允许多个 object 元素相互嵌套,针对具有不同功能的多个用户代理,用户代理选择其支持的第一个元素。

object 元素 可能会延迟 load 事件

form 属性用于明确将 object 元素与其 表单所有者 关联起来。

object 元素支持 尺寸属性

HTMLObjectElement/data

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLObjectElement/type

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLObjectElement/name

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

IDL 属性 datatypename 必须分别 反映 同名内容属性。

HTMLObjectElement/contentDocument

所有当前引擎都支持。

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer8+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

contentDocument 获取器步骤是返回 this内容文档

HTMLObjectElement/contentWindow

所有当前引擎都支持。

Firefox22+Safari13+Chrome53+
Opera?Edge79+
Edge (Legacy)17+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

contentWindow 获取器步骤是返回 this内容窗口

willValidatevalidityvalidationMessage 属性以及 checkValidity()reportValidity()setCustomValidity() 方法是 约束验证 API 的一部分。 form IDL 属性是元素的表单 API 的一部分。

在这个例子中,一个 HTML 页面使用 object 元素嵌入到另一个页面中。

<figure>
 <object data="clock.html"></object>
 <figcaption>My HTML Clock</figcaption>
</figure>