动态标准 — 最后更新时间 2024 年 9 月 12 日
iframe
元素所有当前引擎都支持。
所有当前引擎都支持。
src
— 资源地址srcdoc
— 要在 iframe
中渲染的文档name
— 内容可导航 的名称sandbox
— 嵌套内容的安全规则allow
— 要应用于 iframe
内容的 权限策略allowfullscreen
— 是否允许 iframe
的内容使用 requestFullscreen()
width
— 水平尺寸height
— 垂直尺寸referrerpolicy
— 元素发起的 获取 的 推荐者策略loading
— 用于确定加载延迟[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
};
src
属性提供页面 URL,元素的 内容可导航 将包含该页面。如果存在,则该属性必须是 有效的非空 URL,可能被空格包围。如果在 iframe
元素上指定了 itemprop
属性,则也必须指定 src
属性。
所有当前引擎都支持。
srcdoc
属性提供页面内容,元素的 内容可导航 将包含该内容。该属性的值用于 构建 iframe
srcdoc
文档,这是一个 Document
,其 URL 与 about:srcdoc
匹配。
如果存在,则 srcdoc
属性必须具有一个使用 HTML 语法 的值,该值由以下语法组件组成,按给定顺序排列
上述要求也适用于 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="/gallery?mode=cover&amp;page=1">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;me on the next cover." ></ iframe >
</ article >
注意引号必须转义的方式(否则 srcdoc
属性将过早结束),以及在沙盒内容中提到的原始和号(例如,在 URL 或散文中)必须双重转义的方式 — 一次用于在最初解析 srcdoc
属性时保留和号,以及再次防止在解析沙盒内容时错误解释和号。
此外,请注意,由于 DOCTYPE 在 iframe
srcdoc
文档 中是可选的,并且 html
、head
和 body
元素具有 可选的开始和结束标签,以及 title
元素在 iframe
srcdoc
文档 中也是可选的,因此,srcdoc
属性中的标记可以相对简洁,尽管它代表了整个文档,因为只需要 body
元素的内容在语法中直接出现。其他元素仍然存在,但只是隐含地存在。
在 HTML 语法 中,作者只需要记住使用 U+0022 引号字符 (") 来包装属性内容,然后转义所有 U+0026 和号 (&) 和 U+0022 引号字符 ("),并指定 sandbox
属性,以确保安全嵌入内容。(请记住,在引号之前转义和号,以确保引号变为 " 而不是 &quot;。)
在 XML 中,U+003C 小于号字符 (<) 也需要转义。为了防止 属性值规范化,一些 XML 的空格字符 — 特别是 U+0009 制表符 (tab)、U+000A 换行符 (LF) 和 U+000D 回车符 (CR) — 也需要转义。 [XML]
如果同时指定了 src
属性和 srcdoc
属性,则 srcdoc
属性优先。这允许作者为不支持 srcdoc
属性的旧版用户代理提供备用 URL。
给定 insertedNode,iframe
HTML 元素插入步骤 是
为 insertedNode 创建一个新的子级可导航。
如果 insertedNode 具有 sandbox
属性,则 解析沙盒指令,该指令给定属性的值和 insertedNode 的 iframe
沙盒标志集。
为 insertedNode 处理 iframe
属性,并将 initialInsertion 设置为 true。
给定 removedNode,iframe
HTML 元素移除步骤 与 销毁子可导航元素 相同,同样需要 removedNode。
这种情况发生时不会触发任何 unload
事件(元素的 内容文档 被 销毁,而不是 卸载)。
尽管 iframe
在 阴影树 中进行处理,根据以上内容,其行为的几个其他方面在阴影树方面没有得到很好的定义。有关更多详细信息,请参阅 问题 #763。
只要具有非空 内容可导航元素 的 iframe
元素的 srcdoc
属性被设置、更改或移除,用户代理必须 处理 iframe
属性。
类似地,只要具有非空 内容可导航元素 但未指定 srcdoc
属性的 iframe
元素的 src
属性被设置、更改或移除,用户代理必须 处理 iframe
属性。
要 处理元素 element 的 iframe
属性,可以使用可选布尔值 initialInsertion(默认值为 false)
如果 element 的 srcdoc
属性已指定,则
将 element 的 当前导航是否为延迟加载 布尔值设置为 false。
如果给定 element 的 将延迟加载元素步骤 返回 true,则
将 element 的 延迟加载恢复步骤 设置为从标记为 导航到 srcdoc 资源 的步骤开始的此算法的其余部分。
将 element 的 当前导航是否为延迟加载 布尔值设置为 true。
为 element 开始对延迟加载元素进行交叉观察。
返回。
导航到 srcdoc 资源:给定 element、about:srcdoc
、空字符串以及 element 的 srcdoc
属性的值,导航 iframe
或 frame
。
生成的 Document
必须被视为 iframe
srcdoc
文档。
否则
将 url 设置为给定 element 和 initialInsertion 的 iframe
和 frame
元素的共享属性处理步骤 的结果。
如果 url 为 null,则返回。
如果 url 匹配 about:blank
且 initialInsertion 为 true,则
运行给定 element 的 iframe 加载事件步骤。
返回。
将 referrerPolicy 设置为 element 的 referrerpolicy
内容属性的当前状态。
将 element 的 当前导航是否为延迟加载 布尔值设置为 false。
如果给定 element 的 将延迟加载元素步骤 返回 true,则
将 element 的 延迟加载恢复步骤 设置为从标记为 导航 的步骤开始的此算法的其余部分。
将 element 的 当前导航是否为延迟加载 布尔值设置为 true。
为 element 开始对延迟加载元素进行交叉观察。
返回。
导航:给定 element、url 和 referrerPolicy,导航 iframe
或 frame
。
给定元素 element 和布尔值 initialInsertion,iframe
和 frame
元素的共享属性处理步骤 为
将 url 设置为 URL 记录 about:blank
。
如果 element 指定了 src
属性,且其值不是空字符串,则
如果 element 的 节点可导航元素 的 包含的祖先可导航元素 包含一个其 活动文档 的 URL 等于 url(排除片段 设置为 true)的可导航元素,则返回 null。
如果 url 匹配 about:blank
且 initialInsertion 为 true,则执行给定 element 的 内容可导航元素 的 活动文档 和 url 的 URL 和历史记录更新步骤。
如果 url 类似于 about:blank?foo
,则这是必需的。如果 url 只是简单的 about:blank
,则此步骤将不执行任何操作。
返回 url。
要 导航给定元素 element 的 iframe
或 frame
,可以使用 URL url、引用者策略 referrerPolicy 以及可选的字符串或 null srcdocString(默认值为 null)
将 historyHandling 设置为 "auto
"。
如果 element 的 内容可导航元素 的 活动文档 未 完全加载,则将 historyHandling 设置为 "replace
"。
如果 element 为 iframe
,则将 element 的 挂起资源计时开始时间 设置为给定 element 的 节点文档 的 相关全局对象 的 当前高分辨率时间。
使用 element 的 节点文档 导航 element 的 内容可导航元素 到 url,其中 historyHandling 设置为 historyHandling、referrerPolicy 设置为 referrerPolicy 以及 documentResource 设置为 srcdocString。
每个 Document
都有一个 iframe 加载进行中 标志和一个 静音 iframe 加载 标志。当创建 Document
时,必须为该 Document
取消设置这些标志。
要运行给定 iframe
元素 element 的 iframe 加载事件步骤
如果 childDocument 的 静音 iframe 加载 标志已设置,则返回。
如果 element 的 挂起资源计时开始时间 不为 null,则
设置 childDocument 的 iframe 加载进度 标志。
取消设置 childDocument 的 iframe 加载进度 标志。
这与脚本结合使用,可以用来探测本地网络 HTTP 服务器的 URL 空间。用户代理可能实现 跨域 访问控制策略,这些策略比上面描述的策略更严格,以减轻这种攻击,但不幸的是,这些策略通常与现有的 Web 内容不兼容。
如果元素类型 可能延迟 load 事件,则对于该类型的每个元素 element,用户代理必须 延迟 element 的 节点文档 的 load 事件,如果 element 的 内容可导航 不为空,并且以下任一条件为真:
element 的 内容可导航 的 正在延迟 load
事件 为真;或者
任何东西正在 延迟 element 的 内容可导航 的 活动文档 的 load 事件。
如果在处理 load
事件期间,element 的 内容可导航 再次被 导航,这将进一步 延迟 load 事件。
每个 iframe
元素都与一个关联的 当前导航是懒加载的 布尔值相关联,最初为 false。它在 处理 iframe
属性 算法中设置和取消设置。
一个 iframe
元素,其 当前导航是懒加载的 布尔值为 false,可能延迟 load 事件。
每个 iframe
元素都与一个空或 DOMHighResTimeStamp
挂起的资源计时开始时间 相关联,最初设置为 null。
如果在创建元素时,srcdoc
属性未设置,并且 src
属性也未设置,或者已设置但其值无法 解析,则元素的 内容可导航 将保留在 初始 about:blank
Document
中。
如果用户从该页面 导航 离开,则 iframe
的 内容可导航 的 活动 WindowProxy
对象将代理新的 Window
对象,用于新的 Document
对象,但 src
属性不会改变。
name
属性(如果存在)必须是一个 有效的可导航目标名称。如果存在,则使用给定值来命名元素的 内容可导航,当它被 创建 时。
所有当前引擎都支持。
sandbox
属性在指定时,会对 iframe
托管的任何内容启用一组额外的限制。它的值必须是 一组唯一的空格分隔的标记的无序集,这些标记是 ASCII 不区分大小写 的。允许的值是
allow-downloads
allow-forms
allow-modals
allow-orientation-lock
allow-pointer-lock
allow-popups
allow-popups-to-escape-sandbox
allow-presentation
allow-same-origin
allow-scripts
allow-top-navigation
allow-top-navigation-by-user-activation
allow-top-navigation-to-custom-protocols
当属性设置时,内容被视为来自一个唯一的 不透明的来源,表单、脚本和各种可能令人讨厌的 API 被禁用,并且链接被阻止针对其他 可导航。 allow-same-origin
关键字会导致内容被视为来自其真实来源,而不是强制将其置于 不透明的来源 中; allow-top-navigation
关键字允许内容 导航 其 可遍历的可导航; allow-top-navigation-by-user-activation
关键字的行为类似,但仅当浏览上下文的 活动窗口 有 瞬态激活 时才允许这种 导航; allow-top-navigation-to-custom-protocols
重新启用针对非 提取方案 的导航,以 传递给外部软件;以及 allow-forms
, allow-modals
, allow-orientation-lock
, allow-pointer-lock
, allow-popups
, allow-presentation
, allow-scripts
,以及 allow-popups-to-escape-sandbox
关键字分别重新启用表单、模态对话框、屏幕方向锁定、指针锁定 API、弹出窗口、演示 API、脚本和创建未沙盒化的 辅助浏览上下文。 allow-downloads
关键字允许内容执行下载。 [POINTERLOCK] [SCREENORIENTATION] [PRESENTATION]
allow-top-navigation
和 allow-top-navigation-by-user-activation
关键字不能同时指定,因为这样做是多余的;只有 allow-top-navigation
在这种不符合标准的标记中有效。
类似地,如果指定了 allow-top-navigation
或 allow-popups
,则不能指定 allow-top-navigation-to-custom-protocols
关键字,因为这样做是多余的。
要允许 alert()
, confirm()
和 prompt()
在沙盒内容中,需要同时指定 allow-modals
和 allow-same-origin
关键字,并且加载的 URL 需要与 顶级来源 同源。如果没有 allow-same-origin
关键字,内容始终被视为跨域,而跨域内容 无法显示简单的对话框。
当嵌入的页面与包含 iframe
的页面具有 同源 时,同时设置 allow-scripts
和 allow-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-origin
和allow-forms
关键字,因为这是加载页面 B 时 A 中iframe
中content navigable 的状态。
一般来说,动态删除或更改sandbox
属性是不明智的,因为它会使推理什么允许什么变得非常困难。
当指定allow
属性时,它会确定容器策略,该策略将在初始化iframe
的content 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 的节点文档 不允许使用该特性,那么allow
或allowfullscreen
都不能授予对iframe
元素的content navigable 中的特性访问权限。
要确定Document
对象document 是否允许使用 策略控制的特性feature,请执行以下步骤
如果document 的浏览上下文 为 null,则返回 false。
如果document 不是完全活动的,则返回 false。
如果在document 上对feature、document 和document 的原点 运行在文档中为原点启用特性 的结果为 "Enabled
",则返回 true。
返回 false。
因为它们只影响content navigable 的活动文档 的权限策略,所以allow
和allowfullscreen
属性只在iframe
的content navigable 被导航 时生效。添加或删除它们对已经加载的文档没有影响。
iframe
元素支持尺寸属性,用于嵌入内容具有特定尺寸的情况(例如,广告单元具有明确定义的尺寸)。
iframe
元素永远不会有后备内容,因为它总是创建一个新的子导航,而不管指定的初始内容是否成功使用。
referrerpolicy
属性是一个推荐人策略属性。它的目的是在处理iframe
属性 时设置推荐人策略。 [REFERRERPOLICY]
loading
属性是一个延迟加载属性。它的目的是指示加载视窗之外的iframe
元素的策略。
当loading
属性的状态更改为Eager 状态时,用户代理必须执行以下步骤
如果resumptionSteps 为 null,则返回。
调用resumptionSteps。
iframe
元素的后代不代表任何东西。(在不支持iframe
元素的旧版用户代理中,内容将被解析为可以充当后备内容的标记)。
所有当前引擎都支持。
IDL 属性 src
、name
、sandbox
和 allow
必须 反映 相同名称的相应内容属性。
所有当前引擎都支持。
srcdoc
获取器的步骤是
令 attribute 为运行 根据命名空间和本地名称获取属性 给定的 null、srcdoc
的 本地名称 和 this 所产生的结果。
如果 attribute 为 null,则返回空字符串。
返回 attribute 的 值。
srcdoc
设置器的步骤是
令 compliantString 为调用 获取可信类型兼容字符串 算法,传入 TrustedHTML
、this 的 相关全局对象、给定值、"HTMLIFrameElement srcdoc
" 和 "script
" 所产生的结果。
sandbox
的 DOMTokenList
的 支持的标记 是在 sandbox
属性中定义的,并由用户代理支持的允许值。
allowFullscreen
IDL 属性必须 反映 allowfullscreen
内容属性。
HTMLIFrameElement/referrerPolicy
所有当前引擎都支持。
referrerPolicy
IDL 属性必须 反映 referrerpolicy
内容属性,仅限于已知值。
loading
IDL 属性必须 反映 loading
内容属性,仅限于已知值。
HTMLIFrameElement/contentDocument
所有当前引擎都支持。
contentDocument
获取器的步骤是返回 this 的 内容文档。
HTMLIFrameElement/contentWindow
所有当前引擎都支持。
contentWindow
获取器的步骤是返回 this 的 内容窗口。
以下是一个使用 iframe
来包含来自广告代理的广告的网页示例
< iframe src = "https://ads.example.com/?customerid=923513721&format=banner"
width = "468" height = "60" ></ iframe >
embed
元素所有当前引擎都支持。
所有当前引擎都支持。
src
— 资源的地址type
— 嵌入资源的类型width
— 水平尺寸height
— 垂直尺寸[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 如下所示
如果另一个 任务 已被排队以运行 embed
元素设置步骤 针对 element,则返回。
如果 element 设置了 src
属性,则
令 url 为 对 URL 进行编码解析 所产生的结果,传入 element 的 src
属性的值,相对于 element 的 节点文档。
如果 url 为失败,则返回。
令 request 为一个新的 请求,其 URL 为 url,客户端 为 element 的 节点文档 的 相关设置对象,目标 为 "embed
",凭据模式 为 "include
",模式 为 "navigate
",发起方类型 为 "embed
",并且其 使用 URL 凭据标志 已设置。
获取 request,并将 processResponse 设置为给定 响应 response 的以下步骤。
如果另一个 任务 随后已排队运行 embed
元素设置步骤 用于 element,则返回。
令 type 为给定 element 和 response 后确定 内容类型 的结果。
根据 type 的值执行以下操作。
获取资源必须 延迟 element 的 节点文档 的 load 事件。
否则,显示无插件 用于 element。
要确定给定 embed
元素 element 和 响应 response 的 内容类型,请运行以下步骤。
如果 response 的 路径 组件匹配 插件 支持的模式,则返回该插件可以处理的类型。
例如,一个插件可能表示它可以处理以四个字符字符串 ".swf
" 结尾的 路径 组件的 URL。
如果 response 有 显式 Content-Type 元数据,并且该值是 插件 支持的类型,则返回该值。
返回 null。
上述算法允许 response 具有非 ok 状态 是故意的。这允许服务器即使在错误响应的情况下,也为插件返回数据(例如,HTTP 500 内部服务器错误代码仍然可以包含插件数据)。
要 为 embed
元素 element 显示无插件
每当 embed
元素,它曾 可能处于活动状态,停止 可能处于活动状态,任何已为该元素实例化的 插件 必须被卸载。
embed
元素 可能延迟 load 事件。
IDL 属性 src
和 type
必须分别 反映 同名内容属性。
object
元素所有当前引擎都支持。
所有当前引擎都支持。
data
— 资源地址type
— 嵌入资源类型name
— 内容可导航 的名称form
— 将元素与 form
元素关联width
— 水平尺寸height
— 垂直尺寸[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
属性,如果存在,必须为 有效的可导航目标名称。给定的值用于命名元素的 内容可导航(如果适用),并且如果在元素的 内容可导航 被 创建 时存在。
每当以下条件之一发生时
object
元素发生改变,无论它是否显示其 备用内容,classid
属性被设置、更改或删除,classid
属性不存在,并且其 data
属性被设置、更改或删除,classid
属性和 data
属性均不存在,并且其 type
属性被设置、更改或删除,...用户代理必须在DOM 操作任务源上排队一个元素任务,并提供object
元素以运行以下步骤,以(重新)确定object
元素代表什么。这个任务被排队或正在运行必须延迟元素的节点文档的 load 事件。
如果用户已经表明了他们希望显示此object
元素的备用内容,而不是元素的正常行为,则跳到下面标记为“备用”的步骤。
例如,用户可能会要求显示元素的备用内容,因为该内容使用了一种用户认为更容易访问的格式。
如果元素有一个祖先媒体元素,或者有一个祖先object
元素没有显示其备用内容,或者如果元素不在一个文档中,该文档的浏览上下文不为空,或者如果元素的节点文档没有完全激活,或者如果元素仍在HTML 解析器或XML 解析器的打开元素堆栈中,或者如果元素没有渲染,则跳到下面标记为“备用”的步骤。
如果data
属性存在且其值不是空字符串,则
如果type
属性存在且其值不是用户代理支持的类型,则用户代理可以在不获取内容以检查其实际类型的情况下,跳到下面标记为“备用”的步骤。
如果url 为失败,则触发一个名为error
的事件,并在元素上跳到下面标记为“备用”的步骤。
设request 为一个新的请求,其URL 为url,客户端 为元素的节点文档的相关设置对象,目标 为"object
",凭据模式 为"include
",模式 为"navigate
",启动类型 为"object
",并且其使用 URL 凭据标志 已设置。
获取 request。
如果资源尚不可用(例如,因为资源在缓存中不可用,因此加载资源需要通过网络发出请求),则跳到下面标记为“备用”的步骤。任务(由网络任务源在资源可用后排队)必须从该步骤重新启动此算法。资源可以增量加载;用户代理可以选择在获得足够的数据开始处理资源时,将资源视为“可用”。
如果加载失败(例如,出现 HTTP 404 错误,出现 DNS 错误),触发一个名为error
的事件,并在元素上跳到下面标记为“备用”的步骤。
确定资源类型,如下所示
设资源类型 为未知。
如果用户代理配置为严格遵守此资源的 Content-Type 标头,并且资源具有关联的 Content-Type 元数据,则设资源类型 为资源的 Content-Type 元数据中指定的类型,并跳到下面标记为“处理程序”的步骤。
这可能会引入漏洞,其中一个站点试图嵌入使用特定类型的资源,但远程站点覆盖该类型,而是向用户代理提供触发不同类型内容的资源,这些内容具有不同的安全特性。
从以下列表中运行适当的步骤集
设binary 为 false。
如果资源的 Content-Type 元数据中指定的类型为"text/plain
",并且将区分资源是文本还是二进制的规则应用于资源的结果是资源不是text/plain
,则将binary 设置为 true。
如果资源的 Content-Type 元数据中指定的类型为"application/octet-stream
",则将binary 设置为 true。
如果binary 为 false,则设资源类型 为资源的 Content-Type 元数据中指定的类型,并跳到下面标记为“处理程序”的步骤。
如果object
元素上存在type
属性,并且其值不是application/octet-stream
,则运行以下步骤
如果属性的值是以"image/
" 开头的类型,并且该类型也不是XML MIME 类型,则设资源类型 为该type
属性中指定的类型。
跳到下面标记为“处理程序”的步骤。
如果object
元素上存在type
属性,则设暂定类型 为该type
属性中指定的类型。
否则,设暂定类型 为资源的计算类型。
如果暂定类型 不是application/octet-stream
,则设资源类型 为暂定类型 并跳到下面标记为“处理程序”的步骤。
如果将URL 解析器算法应用于指定资源的URL(经过任何重定向)的结果,得到一个URL 记录,其路径 组件与插件支持的模式匹配,则设资源类型 为该插件可以处理的类型。
例如,插件可能会说它可以处理路径 组件以四个字符字符串".swf
" 结尾的资源。
此步骤有可能完成,或者上面的一个子步骤可能直接跳到下一步,而资源类型 仍然未知。在这两种情况下,下一步都会触发备用。
处理程序:根据以下匹配的第一个情况处理内容
image/
" 开头如果object
元素的内容可导航 为 null,则为元素创建一个新的子可导航。
如果 response 的 URL 不与 about:blank
匹配,则使用元素的 节点文档 将元素的 内容可导航 导航到 response 的 URL,并将 historyHandling 设置为 "replace
"。
image/
" 开头,并且图像支持没有被禁用应用 图像嗅探 规则来确定图像的类型。
如果图像无法渲染,例如由于图像格式错误或不支持的格式,则跳到下面标记为 *回退* 的步骤。
给定的 资源类型 不受支持。跳到下面标记为 *回退* 的步骤。
如果上一步以 资源类型 未知结束,则会触发这种情况。
元素的内容不是 object
元素表示的一部分。
如果 object
元素不表示其 内容可导航,则在资源完全加载后,使用给定的 object
元素在 DOM 操作任务源 上 排队一个元素任务,以 触发一个名为 load
的事件。
返回。
由于上面的算法,object
元素的内容充当 回退内容,仅在引用的资源无法显示时使用(例如,由于它返回了 404 错误)。这允许多个 object
元素相互嵌套,针对具有不同功能的多个用户代理,用户代理选择其支持的第一个元素。
object
元素 可能会延迟 load 事件。
form
属性用于明确将 object
元素与其 表单所有者 关联起来。
所有当前引擎都支持。
所有当前引擎都支持。
所有当前引擎都支持。
IDL 属性 data
、type
和 name
必须分别 反映 同名内容属性。
HTMLObjectElement/contentDocument
所有当前引擎都支持。
contentDocument
获取器步骤是返回 this 的 内容文档。
HTMLObjectElement/contentWindow
所有当前引擎都支持。
contentWindow
获取器步骤是返回 this 的 内容窗口。
willValidate
、validity
和 validationMessage
属性以及 checkValidity()
、reportValidity()
和 setCustomValidity()
方法是 约束验证 API 的一部分。 form
IDL 属性是元素的表单 API 的一部分。
在这个例子中,一个 HTML 页面使用 object
元素嵌入到另一个页面中。
< figure >
< object data = "clock.html" ></ object >
< figcaption > My HTML Clock</ figcaption >
</ figure >