翻译正在进行中。
概述
HTML中的<iframe>标签(又称内联框架元素)表示了一个嵌套的浏览上下文(browsing context),实际上是用来在当前页面中内嵌另一个HTML页面。在HTML4.0.1中,文档(document
)可以包含一个head
和一个body
组合或者包含一个head
和一个
框架集(frame-set)组合,但不能同时包含
body
和
frame-set。然而<iframe>标签可以插入到一个正常的文档体中(
document body)。每个浏览上下文
(browsing context)都有自己的会话历史和活动文档。包含其它嵌入内容的浏览上下文(browsing context)称作父级浏览上下文(parent browsing context)。顶层的(top-level)浏览上下文(不再拥有父窗体的)一般就是浏览器的window对象。
- Content categories Flow content, phrasing content, embedded content, interactive content, palpable content.
- Permitted contentSpecial, see prose
- Tag 遗漏 不允许,开始标签和结束标签都不能省略。
- 允许的父类元素 任何可以接受嵌入内容的元素
- DOM 接口
HTMLIFrameElement
属性
该元素包含全局属性。
align
已废弃 HTML4.01, 已废弃 HTML5- The alignment of this element with respect to the surrounding context.
frameborder
HTML 4 only- The value 1 (the default) tells the browser to draw a border between this frame and every other frame. The value 0 tells the browser not to draw a border between this frame and other frames.
height
- 以CSS像素格式HTML5,或像素格式HTML 4.01,或百分比格式指定frame的高度。
longdesc
HTML 4 only- A URI of a long description of the frame. Due to widespread misuse, this is not helpful for non-visual browsers.
marginheight
HTML 4 only- 框架内容到框架的上下边距,以像素格式表示。
marginwidth
HTML 4 only- 框架内容到框架的左右边距,以像素格式表示。
mozallowfullscreen
- In Gecko 9.0 or later, this attribute can be set to
true
if the frame is allowed to be placed into full screen mode by calling itselement.mozRequestFullScreen()
method. If this isn't set, the element can't be placed into full screen mode. webkitallowfullscreen
- In Chrome 17 or later (and maybe earlier), this attribute can be set to
true
if the frame is allowed to be placed into full screen mode by calling itselement.webkitRequestFullScreen()
method. If this isn't set, the element can't be placed into full screen mode. mozapp
Only available on Firefox OS- For frames hosting an open web app, this specifies the URL of the app manifest. This ensures that the app is loaded with the right permissions. See Using the Browser API for details. Available in Gecko 13.0 and later.
mozbrowser
Only available on Firefox OS- Indicates that the frame is to appear like a top-level browser window to the embedded content. This means that
window.top
,window.parent
,window.frameElement
, etc. will not reflect the frame hierarchy. This allows for a web browser UI to be implemented entirely with web technology, given the right permissions. See Using the Browser API for details. Available in Gecko 13.0 and later. name
- 嵌入的浏览上下文(框架)的名称。该名称可以用作
<a>
标签,<form>
标签的target
属性值,或<input>
标签和<button>
标签的formtaget
属性值。 remote
Only available on Firefox OS- Load the frame's page in a separate content process.
scrolling
HTML 4 only- Enumerated attribute indicating when the browser should provide a scroll bar (or other scrolling device) for the frame:
auto
: Only when needed.yes
: Always provide a scroll bar.no
: Never provide a scoll bar.
sandbox
HTML5 only- 如果指定了空字符串,该属性对呈现在iframe框架中的内容启用一些额外的限制条件。属性值可以是用空格分隔的一系列指定的字符串。有效的值有:
-
allow-same-origin
: 允许将内容作为普通来源对待。如果未使用该关键字,嵌入的内容将被视为一个独立的源。allow-top-navigation
:嵌入的页面的上下文可以导航(加载)内容到顶级的浏览上下文环境(browsing context)。如果未使用该关键字,这个操作将不可用。allow-forms
: 允许嵌入的浏览上下文可以提交表单。如果该关键字未使用,该操作将不可用。allow-scripts
: 允许嵌入的浏览上下文运行脚本(但不能window创建弹窗)。如果该关键字未使用,这项操作不可用。
注意:
- 当被嵌入的文档与主页面同源时,强烈建议不要同时使用
allow-scripts
和allow-same-origin
,否则的话将允许嵌入的文档通过代码删除sandbox
属性。虽然你可以这么做,但是这样的话其安全性还不如不用sandbox。
- 如果攻击者可以将潜在的恶意内容往用户的已沙箱化的iframe中显示,那么沙箱操作的安全性将不再可靠。推荐把这种内容放置到独立的专用域中,减小可能的损失。[Sandboxing in general is only of minimal help if the attacker can arrange for the potentially hostile content to be displayed in the user's browser outside a sandboxed
iframe
. It is recommended that such content should be served from a separate dedicated domain, to limit the potential damage.]
seamless
HTML5 only- 该布尔属性指示浏览器将iframe渲染成容器页面文档的一部分。例如,通过打被包含的文档的链接,在iframe页面的样式被渲染之前,父页面的CSS样式就可以应用在iframe中(除非被其他设置阻止)。
src
- 嵌套页面的URL地址。.
srcdoc
HTML5 only- 该属性值可以是HTML代码,这些代码会被渲染到iframe中,如果同时指定了src属性,srcdoc会覆盖src所指向的页面。该属性最好能与sandbox和seamless属性一起使用。
width
- 以CSS像素格式HTML5,或以像素格式HTML 4.01,或以百分比格式指定frame的宽度。
脚本
内联的框架,就像 <frame>
元素一样,会加入 window.frames
伪数组中。
通过contentWindow属性,脚本可以访问iframe元素所包含的HTML页面的window对象。contentDocument属性则引用了iframe中的文档元素(等同于使用contentWindow.document),但IE8-不支持。
通过访问window.parent,脚本可以从框架中引用它的父框架的window。
脚本试图访问的框架内容必须遵守同源策略,并且无法访问非同源的window对象的几乎所有属性。同源策略同样适用于子窗体访问父窗体的window对象。跨域通信可以通过window.postMessage来实现。
案例
<script type="text/javascript"> var iframe = window.getElementsByTagName( "iframe" )[ 0 ]; alert( "Frame title: " + iframe.contentWindow.title ); </script> <iframe src="page.html" width="300" height="300"> <p>Your browser does not support iframes.</p> </iframe>
Notes
Starting in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3), rendering of inline frames correctly respects the borders of their containing element when they're rounded using border-radius
.
说明
Specification | Status | Comment |
---|---|---|
WHATWG HTML Living Standard <iframe> |
Living Standard | |
HTML5 <iframe> |
Recommendation | |
HTML 4.01 Specification <iframe> |
Recommendation |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support | 1.0 | (Yes) | (Yes) | (Yes) | (Yes) |
sandbox |
4 | 17.0 (17.0) | 10.0 | 15.0 | 5.0 |
seamless |
4 | 未实现 | ? | ? | ? |
srcdoc |
4 | 未实现 | ? | ? | ? |
allowfullscreen |
17 webkit | 9.0 (9.0) moz | 未实现 | 未实现 | 未实现 |
Feature | Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
sandbox |
2.2 | 17.0 (17.0) | 10.0 | 37 | 4.3 |
seamless |
? | 未实现 | ? | ? | ? |
srcdoc |
? | 未实现 | ? | ? | ? |
allowfullscreen |
? | 9.0 (9.0)moz | 未实现 | 未实现 | 未实现 |