--- title: slug: Web/HTML/Element/iframe tags: - - CORS - Content - HTML5 - iframe.contentWindow.document translation_of: Web/HTML/Element/iframe --- {{HTMLRef}} HTML内联框架元素 (<iframe>) 表示嵌套的{{Glossary("browsing context")}}。它能够将另一个HTML页面嵌入到当前页面中。 {{EmbedInteractiveExample("pages/tabbed/iframe.html", "tabbed-standard")}} 这个示例的源代码存储在GitHub仓库中。如果你想给这个项目贡献代码,请克隆 https://github.com/mdn/interactive-examples 仓库并给我们提交 pull request。 每个嵌入的浏览上下文(embedded browsing context)都有自己的会话历史记录(session history)和DOM树。包含嵌入内容的浏览上下文称为父级浏览上下文。顶级浏览上下文(没有父级)通常是由 {{domxref("Window")}} 对象表示的浏览器窗口。 页面上的每个<iframe>都需要增加内存和其它计算资源,这是因为每个浏览上下文都拥有完整的文档环境。虽然理论上来说你能够在代码中写出来无限多的<iframe>,但是你最好还是先看看这么做会不会导致某些性能问题。 属性 该元素包含全局属性。 {{htmlattrdef("allow")}} 用于为<iframe>指定其特征策略. {{htmlattrdef("allowfullscreen")}} 设置为true时,可以通过调用 <iframe> 的 {{domxref("Element.requestFullscreen", "requestFullscreen()")}} 方法激活全屏模式。 这是一个历史遗留属性,已经被重新定义为 allow="fullscreen"。 {{htmlattrdef("allowpaymentrequest")}} 设置为true时,跨域的 <iframe> 就可以调用 Payment Request API。 这是一个历史遗留属性,已经被重新定义为 allow="payment". {{htmlattrdef("csp")}} {{experimental_inline}} 对嵌入的资源配置内容安全策略。 查看 {{domxref("HTMLIFrameElement.csp")}} 获取详情。 {{htmlattrdef("height")}} 以CSS像素格式{{HTMLVersionInline(5)}},或像素格式{{HTMLVersionInline(4.01)}},或百分比格式指定frame的高度。默认值为150。 {{htmlattrdef("importance")}} {{experimental_inline}} 表示 <iframe> 的 src 属性指定的资源的加载优先级。允许的值有: auto (default) 不指定优先级。浏览器根据自身情况决定资源的加载顺序 high 资源的加载优先级较高 low 资源的加载优先级较低 {{htmlattrdef("name")}} 用于定位嵌入的浏览上下文的名称。该名称可以用作 {{HTMLElement("a")}} 标签与 {{HTMLElement("form")}} 标签的 target 属性值,也可以用作 {{HTMLElement("input")}} 标签和 {{HTMLElement("button")}} 标签的 formtarget 属性值,还可以用作 {{domxref("Window.open()","window.open()")}} 方法的 windowName 参数值。 {{htmlattrdef("referrerpolicy")}} 表示在获取 iframe 资源时如何发送 referrer 首部: no-referrer: 不发送 {{HTTPHeader("Referer")}} 首部。 no-referrer-when-downgrade (default): 向不受 {{Glossary("TLS")}} ({{Glossary("HTTPS")}}) 保护的 {{Glossary("origin")}} 发送请求时,不发送 {{HTTPHeader("Referer")}} 首部。 origin: referrer 首部中仅包含来源页面的源。换言之,仅包含来源页面的 scheme, {{Glossary("host")}}, 以及 {{Glossary("port")}}。 origin-when-cross-origin: 发起跨域请求时,仅在 referrer 中包含来源页面的源。发起同源请求时,仍然会在 referrer 中包含来源页面在服务器上的路径信息。 same-origin: 对于 {{Glossary("Same-origin policy", "same origin")}} (同源)请求,发送 referrer 首部,否则不发送。 strict-origin: 仅当被请求页面和来源页面具有相同的协议安全等级时才发送 referrer 首部(比如从采用 HTTPS 协议的页面请求另一个采用 HTTPS 协议的页面)。如果被请求页面的协议安全等级较低,则不会发送 referrer 首部(比如从采用 HTTPS 协议的页面请求采用 HTTP 协议的页面)。 strict-origin-when-cross-origin: 当发起同源请求时,在 referrer 首部中包含完整的 URL。当被请求页面与来源页面不同源但是有相同协议安全等级时(比如 HTTPS→HTTPS),在 referrer 首部中仅包含来源页面的源。当被请求页面的协议安全等级较低时(比如 HTTPS→HTTP),不发送 referrer 首部。 unsafe-url: 始终在 referrer 首部中包含源以及路径 (但不包括 fragment,密码,或用户名)。这个值是不安全的, 因为这样做会暴露受 TLS 保护的资源的源和路径信息。 {{htmlattrdef("sandbox")}} 该属性对呈现在 iframe 框架中的内容启用一些额外的限制条件。属性值可以为空字符串(这种情况下会启用所有限制),也可以是用空格分隔的一系列指定的字符串。有效的值有: allow-downloads-without-user-activation {{experimental_inline}}: 允许在没有征求用户同意的情况下下载文件. allow-forms: 允许嵌入的浏览上下文提交表单。如果没有使用该关键字,则无法提交表单。 allow-modals: 允许嵌入的浏览上下文打开模态窗口。 allow-orientation-lock: 允许嵌入的浏览上下文锁定屏幕方向(译者注:比如智能手机、平板电脑的水平朝向或垂直朝向)。 allow-pointer-lock: 允许嵌入的浏览上下文使用 Pointer Lock API. allow-popups: 允许弹窗 (例如 window.open, target="_blank", showModalDialog)。如果没有使用该关键字,相应的功能将自动被禁用。 allow-popups-to-escape-sandbox: 允许沙箱化的文档打开新窗口,并且新窗口不会继承沙箱标记。例如,安全地沙箱化一个广告页面,而不会在广告链接到的新页面中启用相同的限制条件。 allow-presentation: 允许嵌入的浏览上下文开始一个 presentation session。 allow-same-origin: 如果没有使用该关键字,嵌入的浏览上下文将被视为来自一个独立的源,这将使 {{Glossary("same-origin policy")}} 同源检查失败。 allow-scripts: 允许嵌入的浏览上下文运行脚本(但不能创建弹窗)。如果没有使用该关键字,就无法运行脚本。 allow-storage-access-by-user-activation {{experimental_inline}}: 允许嵌入的浏览上下文通过 Storage Access API 使用父级浏览上下文的存储功能。 allow-top-navigation: 允许嵌入的浏览上下文导航(加载)内容到顶级的浏览上下文。 allow-top-navigation-by-user-activation: 允许嵌入的浏览上下文在经过用户允许后导航(加载)内容到顶级的浏览上下文。 注意: 当被嵌入的文档与主页面同源时,强烈建议不要同时使用 allow-scripts 和 allow-same-origin。如果同时使用,嵌入的文档就可以通过代码删除 sandbox 属性,如此,就安全性而言还不如不用sandbox。 如果攻击者可以在沙箱化的 iframe 之外展示内容,例如用户在新标签页中打开内联框架,那么沙箱化也就没有意义了。建议把这种内容放置到独立的专用域中,以减小可能的损失。 沙箱属性(sandbox)在Internet Explorer 9及更早的版本上不被支持。 {{htmlattrdef("src")}} 被嵌套的页面的 URL 地址。使用 about:blank 值可以嵌入一个遵从同源策略的空白页。在 Firefox (version 65及更高版本)、基于 Chromium 的浏览器、Safari/iOS 中使用代码移除 iframe 的 src 属性(例如通过 {{domxref("Element.removeAttribute()")}} )会导致 about:blank 被载入 frame。 {{htmlattrdef("srcdoc")}} {{HTMLVersionInline(5)}} only 该属性是一段HTML代码,这些代码会被渲染到 iframe 中。如果浏览器不支持 srcdoc 属性,则会渲染 src 属性表示的内容。 {{htmlattrdef("width")}} 以CSS像素格式{{HTMLVersionInline(5)}},或以像素格式{{HTMLVersionInline(4.01)}},或以百分比格式指定的 frame 的宽度。默认值是300。 不赞成使用的属性 下面这些属性已不赞成使用,并且可能不再被所有的浏览器支持。你应避免在新项目里面使用它们,也应尽量从旧项目中移除它们。 {{htmlattrdef("align")}} {{deprecated_inline("html4.01")}}, {{obsolete_inline("html5")}} 此元素相对于周围元素的对齐方式。 {{htmlattrdef("frameborder")}} {{obsolete_inline("html5")}} 值为1(默认值)时,显示此框架的边框。值为0时移除边框。此属性已不赞成使用,请使用 CSS 属性 {{cssxref("border")}} 代替。 {{htmlattrdef("longdesc")}} {{obsolete_inline("html5")}} 表示框架内容的长描述的 URL。由于广泛的误用,该属性对于无图形界面的浏览器不起作用。 {{htmlattrdef("marginheight")}} {{obsolete_inline("html5")}} 这个属性定义了框架的内容距其上边框与下边框的距离,单位是像素。 {{htmlattrdef("marginwidth")}} {{obsolete_inline("html5")}} 这个属性定义了框架的内容距其左边框和右边框的距离,单位是像素。 {{htmlattrdef("scrolling")}} {{obsolete_inline("html5")}} 这个属性控制是否要在框架内显示滚动条,允许的值包括: auto: 仅当框架的内容超出框架的范围时显示滚动条。 yes: 始终显示滚动条。 no: 从不显示滚动条。 非标准属性 {{non-standard_inline}} {{htmlattrdef("mozbrowser")}} {{non-standard_inline}} 查看 {{bug(1318532)}} 了解如何在 Firefox 的 WebExtensions 中使用此属性。 这个属性可以让 <iframe> 变得像顶级浏览器窗口,详情请参看 Browser API。这个属性只能在 WebExtensions 中使用。 脚本 内联的框架,就像 {{HTMLElement("frame")}} 元素一样,会被包含在 {{domxref("window.frames")}} 伪数组(类数组的对象)中。 有了 DOM {{domxref("HTMLIFrameElement")}} 对象,脚本可以通过 {{domxref("HTMLIFrameElement.contentWindow", "contentWindow")}} 访问内联框架的 {{domxref("window")}} 对象。 {{domxref("HTMLIFrameElement.contentDocument", "contentDocument")}} 属性则引用了 <iframe> 内部的 document 元素,(等同于使用contentWindow.document),但IE8-不支持。 在框架内部,脚本可以通过 {{domxref("window.parent")}} 引用父窗口对象。 脚本访问框架内容必须遵守同源策略,并且无法访问非同源的 window 对象的几乎所有属性。同源策略同样适用于子窗体访问父窗体的 window 对象。跨域通信可以通过 window.postMessage 来实现。 定位和缩放 作为一个可替换元素, 可以使用 {{cssxref("object-position")}} 和 {{cssxref("object-fit")}} 来定位、对齐、缩放 <iframe> 元素内的文档。 示例 一个简单的 <iframe> 下面的例子中,我们创建了一个框架。当用户点击框架中的按钮时,浏览器会弹出一个提示框。 HTML <iframe src="https://mdn-samples.mozilla.org/snippets/html/iframe-simple-contents.html" title="iframe example 1" width="400" height="300"> <p>Your browser does not support iframes.</p> </iframe> Result {{ EmbedLiveSample('Example1', '', '', '', 'Web/HTML/Element/iframe') }} 在新标签页中打开 <iframe> 里面的链接 下面的例子演示了在框架中展示谷歌地图。 HTML <base target="_blank"> <iframe id="Example2" title="Example2" width="400" height="300" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps?f=q&source=s_q&hl=es-419&geocode=&q=buenos+aires&sll=37.0625,-95.677068&sspn=38.638819,80.859375&t=h&ie=UTF8&hq=&hnear=Buenos+Aires,+Argentina&z=11&ll=-34.603723,-58.381593&output=embed"> </iframe> <br> <small> <a href="https://maps.google.com/maps?f=q&source=embed&hl=es-419&geocode=&q=buenos+aires&sll=37.0625,-95.677068&sspn=38.638819,80.859375&t=h&ie=UTF8&hq=&hnear=Buenos+Aires,+Argentina&z=11&ll=-34.603723,-58.381593" style="color:#0000FF;text-align:left"> See bigger map </a> </small> Result {{ EmbedLiveSample('Example2', '', '', '', 'Web/HTML/Element/iframe') }} 无障碍环境 使用 iframe 的 title 属性来标识框架的主要内容,这样可以极大方便使用辅助技术(例如屏幕阅读器)浏览网页的人。框架的标题应该清楚地描述框架的内容,例如: <iframe title="Wikipedia page for Avocados" src="https://en.wikipedia.org/wiki/Avocado"></iframe> 如果没有标题,他们就只能浏览每一个框架来获取需要的内容。这非常耗时间,也很容易让人迷惑,尤其是当页面中包含很多框架或者互动内容如音视频等的时候。 规范 规范 状态 说明 {{SpecName('Referrer Policy', '#referrer-policy-delivery-referrer-attribute', 'referrerpolicy attribute')}} {{Spec2('Referrer Policy')}} 新增属性: referrerpolicy {{SpecName('HTML WHATWG', 'iframe-embed-object.html#the-iframe-element', '<iframe>')}} {{Spec2('HTML WHATWG')}} {{SpecName('HTML5 W3C', 'embedded-content-0.html#the-iframe-element', '<iframe>')}} {{Spec2('HTML5 W3C')}} {{SpecName('HTML4.01', 'present/frames.html#h-16.5', '<iframe>')}} {{Spec2('HTML4.01')}} {{SpecName('Screen Orientation')}} {{Spec2('Screen Orientation')}} Adds allow-orientation-lock to the sandbox attribute. {{SpecName('Presentation','#sandboxing-and-the-allow-presentation-keyword','allow-presentation')}} {{Spec2('Presentation')}} Adds allow-presentation to the sandbox attribute 浏览器兼容性 {{Compat("html.elements.iframe", 3)}}
HTML内联框架元素 (<iframe>) 表示嵌套的{{Glossary("browsing context")}}。它能够将另一个HTML页面嵌入到当前页面中。
<iframe>
每个嵌入的浏览上下文(embedded browsing context)都有自己的会话历史记录(session history)和DOM树。包含嵌入内容的浏览上下文称为父级浏览上下文。顶级浏览上下文(没有父级)通常是由 {{domxref("Window")}} 对象表示的浏览器窗口。
页面上的每个<iframe>都需要增加内存和其它计算资源,这是因为每个浏览上下文都拥有完整的文档环境。虽然理论上来说你能够在代码中写出来无限多的<iframe>,但是你最好还是先看看这么做会不会导致某些性能问题。
该元素包含全局属性。
true
allow="fullscreen"
allow="payment"
150
src
auto
high
low
target
formtarget
windowName
no-referrer
no-referrer-when-downgrade
origin
origin-when-cross-origin
same-origin
strict-origin
strict-origin-when-cross-origin
unsafe-url
allow-downloads-without-user-activation
allow-forms
allow-modals
allow-orientation-lock
allow-pointer-lock
allow-popups
showModalDialog
allow-popups-to-escape-sandbox
allow-presentation
allow-same-origin
allow-scripts
allow-storage-access-by-user-activation
allow-top-navigation
allow-top-navigation-by-user-activation
注意:
sandbox
iframe
about:blank
srcdoc
300
下面这些属性已不赞成使用,并且可能不再被所有的浏览器支持。你应避免在新项目里面使用它们,也应尽量从旧项目中移除它们。
1
0
yes
no
查看 {{bug(1318532)}} 了解如何在 Firefox 的 WebExtensions 中使用此属性。
这个属性可以让 <iframe> 变得像顶级浏览器窗口,详情请参看 Browser API。这个属性只能在 WebExtensions 中使用。
内联的框架,就像 {{HTMLElement("frame")}} 元素一样,会被包含在 {{domxref("window.frames")}} 伪数组(类数组的对象)中。
有了 DOM {{domxref("HTMLIFrameElement")}} 对象,脚本可以通过 {{domxref("HTMLIFrameElement.contentWindow", "contentWindow")}} 访问内联框架的 {{domxref("window")}} 对象。 {{domxref("HTMLIFrameElement.contentDocument", "contentDocument")}} 属性则引用了 <iframe> 内部的 document 元素,(等同于使用contentWindow.document),但IE8-不支持。
document
在框架内部,脚本可以通过 {{domxref("window.parent")}} 引用父窗口对象。
脚本访问框架内容必须遵守同源策略,并且无法访问非同源的 window 对象的几乎所有属性。同源策略同样适用于子窗体访问父窗体的 window 对象。跨域通信可以通过 window.postMessage 来实现。
window
作为一个可替换元素, 可以使用 {{cssxref("object-position")}} 和 {{cssxref("object-fit")}} 来定位、对齐、缩放 <iframe> 元素内的文档。
下面的例子中,我们创建了一个框架。当用户点击框架中的按钮时,浏览器会弹出一个提示框。
<iframe src="https://mdn-samples.mozilla.org/snippets/html/iframe-simple-contents.html" title="iframe example 1" width="400" height="300"> <p>Your browser does not support iframes.</p> </iframe>
{{ EmbedLiveSample('Example1', '', '', '', 'Web/HTML/Element/iframe') }}
下面的例子演示了在框架中展示谷歌地图。
<base target="_blank"> <iframe id="Example2" title="Example2" width="400" height="300" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps?f=q&source=s_q&hl=es-419&geocode=&q=buenos+aires&sll=37.0625,-95.677068&sspn=38.638819,80.859375&t=h&ie=UTF8&hq=&hnear=Buenos+Aires,+Argentina&z=11&ll=-34.603723,-58.381593&output=embed"> </iframe> <br> <small> <a href="https://maps.google.com/maps?f=q&source=embed&hl=es-419&geocode=&q=buenos+aires&sll=37.0625,-95.677068&sspn=38.638819,80.859375&t=h&ie=UTF8&hq=&hnear=Buenos+Aires,+Argentina&z=11&ll=-34.603723,-58.381593" style="color:#0000FF;text-align:left"> See bigger map </a> </small>
{{ EmbedLiveSample('Example2', '', '', '', 'Web/HTML/Element/iframe') }}
使用 iframe 的 title 属性来标识框架的主要内容,这样可以极大方便使用辅助技术(例如屏幕阅读器)浏览网页的人。框架的标题应该清楚地描述框架的内容,例如:
<iframe title="Wikipedia page for Avocados" src="https://en.wikipedia.org/wiki/Avocado"></iframe>
如果没有标题,他们就只能浏览每一个框架来获取需要的内容。这非常耗时间,也很容易让人迷惑,尤其是当页面中包含很多框架或者互动内容如音视频等的时候。
referrerpolicy
{{Compat("html.elements.iframe", 3)}}