<iframe>:內聯框架元素

基線 廣泛可用

此功能已得到良好建立,並且可在許多裝置和瀏覽器版本上執行。它自以下時間起在所有瀏覽器中都可用 2015 年 7 月.

<iframe> HTML 元素表示巢狀的 瀏覽上下文,將另一個 HTML 頁面嵌入到當前頁面中。

試一試

每個嵌入的瀏覽上下文都有自己的 文件 並允許 URL 導航。每個嵌入的瀏覽上下文的導航都被線性化為最頂層瀏覽上下文的 會話歷史記錄。嵌入其他瀏覽上下文的瀏覽上下文稱為父瀏覽上下文最頂層瀏覽上下文(沒有父級的上下文)通常是瀏覽器視窗,由 Window 物件表示。

警告:因為每個瀏覽上下文都是一個完整的文件環境,所以頁面中的每個<iframe>都需要增加記憶體和其他計算資源。雖然理論上您可以使用任意數量的<iframe>,但請檢查效能問題。

屬性

此元素包括 全域性屬性

allow

<iframe>指定 許可權策略。該策略根據請求的來源定義哪些功能可用於<iframe>(例如,訪問麥克風、攝像頭、電池、網路共享等)。

請參閱Permissions-Policy主題中的 iframes 以獲取示例。

注意:allow屬性指定的許可權策略在Permissions-Policy標頭中指定的策略之上實施了進一步的限制。它不會替換它。

allowfullscreen

如果<iframe>可以透過呼叫 requestFullscreen() 方法啟用全屏模式,則將其設定為true

注意:此屬性被認為是舊版屬性,並重新定義為allow="fullscreen"

allowpaymentrequest 已棄用 非標準

如果應允許跨源<iframe>呼叫 支付請求 API,則將其設定為true

注意:此屬性被認為是舊版屬性,並重新定義為allow="payment"

browsingtopics 實驗性 非標準

如果存在,則為布林屬性,指定應將當前使用者的選定主題與<iframe>源的請求一起傳送。有關更多詳細資訊,請參閱 使用主題 API

credentialless 實驗性

設定為true以使<iframe>無憑據,這意味著其內容將在新的臨時上下文中載入。它無法訪問與其來源關聯的網路、cookie 和儲存資料。它使用一個新的、特定於頂級文件生命週期的上下文。作為回報,可以解除 Cross-Origin-Embedder-Policy (COEP) 嵌入規則,因此設定了 COEP 的文件可以嵌入不具備此規則的第三方文件。有關更多詳細資訊,請參閱 IFrame 無憑據

csp 實驗性

對嵌入資源實施的 內容安全策略。有關詳細資訊,請參閱 HTMLIFrameElement.csp

height

框架的高度,以 CSS 畫素為單位。預設值為 150

載入

指示瀏覽器何時載入 iframe

立即載入

在頁面載入時立即載入 iframe(這是預設值)。

延遲載入

延遲載入 iframe,直到它到達距視覺視口的計算距離(由瀏覽器定義)。目的是避免在瀏覽器相當確定需要該框架之前,使用獲取框架所需的網路和儲存頻寬。這在大多數典型用例中提高了效能和成本,特別是透過減少初始頁面載入時間。

注意:僅在啟用 JavaScript 時才會延遲載入。這是一項反跟蹤措施。

名稱

嵌入式瀏覽上下文的可定位名稱。這可以在 <a><form><base> 元素的 target 屬性中使用;<input><button> 元素的 formtarget 屬性中;或 window.open() 方法中的 windowName 引數中。

referrerpolicy

指示在獲取框架資源時傳送哪個referrer

no-referrer

不會發送 Referer 標頭。

no-referrer-when-downgrade

不會將 Referer 標頭髮送到沒有 TLSHTTPS)的

origin

傳送的 referrer 將限制為引用頁面的源:其方案主機

origin-when-cross-origin

傳送到其他源的 referrer 將限制為方案、主機和埠。相同源上的導航仍將包含路徑。

same-origin

將為相同源傳送 referrer,但跨源請求將不包含 referrer 資訊。

strict-origin

僅在協議安全級別保持不變(HTTPS→HTTPS)時將文件的源作為 referrer 傳送,但不要將其傳送到安全性較低的目的地(HTTPS→HTTP)。

strict-origin-when-cross-origin(預設)

執行相同源請求時傳送完整 URL,僅在協議安全級別保持不變(HTTPS→HTTPS)時傳送源,並將無標頭髮送到安全性較低的目的地(HTTPS→HTTP)。

unsafe-url

referrer 將包含源路徑(但不包含片段密碼使用者名稱)。此值不安全,因為它會將來自 TLS 保護資源的源和路徑洩漏到不安全的源。

沙箱

控制應用於嵌入在 <iframe> 中的內容的限制。屬性的值可以為空以應用所有限制,或者使用空格分隔的標記來解除特定限制

allow-downloads

允許透過具有 download 屬性的 <a><area> 元素下載檔案,以及透過導致檔案下載的導航。無論使用者是否單擊連結,或者 JS 程式碼在沒有使用者互動的情況下啟動它,此功能都有效。

allow-forms

允許頁面提交表單。如果不使用此關鍵字,表單將正常顯示,但提交表單不會觸發輸入驗證、將資料傳送到 Web 伺服器或關閉對話方塊。

allow-modals

允許頁面透過 Window.alert()Window.confirm()Window.print()Window.prompt() 開啟模式視窗,同時無論此關鍵字如何,都允許開啟 <dialog>。它還允許頁面接收 BeforeUnloadEvent 事件。

allow-orientation-lock

允許資源鎖定螢幕方向

allow-pointer-lock

允許頁面使用 指標鎖定 API

allow-popups

允許彈出視窗(例如來自 Window.open()target="_blank"Window.showModalDialog())。如果不使用此關鍵字,該功能將靜默失敗。

allow-popups-to-escape-sandbox

允許沙箱文件開啟新的瀏覽上下文,而不會強制其使用沙箱標誌。例如,這將允許安全地沙箱化第三方廣告,而不會強制對廣告連結到的頁面施加相同的限制。如果不包含此標誌,重定向的頁面、彈出視窗或新標籤頁將受到與原始 <iframe> 相同的沙箱限制。

allow-presentation

允許嵌入者控制 iframe 是否可以啟動簡報會話

allow-same-origin

如果不使用此標記,則該資源將被視為來自一個特殊的源,該源始終會使同源策略失敗(可能會阻止訪問資料儲存/cookie和某些 JavaScript API)。

allow-scripts

允許頁面執行指令碼(但不建立彈出視窗)。如果不使用此關鍵字,則不允許此操作。

allow-storage-access-by-user-activation 實驗性的

允許在 <iframe> 中載入的文件使用儲存訪問 API請求訪問未分割槽的 cookie。

allow-top-navigation

允許資源導航頂級瀏覽上下文(名為 _top 的上下文)。

allow-top-navigation-by-user-activation

允許資源導航頂級瀏覽上下文,但僅在由使用者手勢啟動時才允許。

allow-top-navigation-to-custom-protocols

允許導航到瀏覽器內建或網站註冊的非 http 協議。此功能也由 allow-popupsallow-top-navigation 關鍵字啟用。

注意

  • 當嵌入文件與嵌入頁面具有相同的源時,強烈建議不要同時使用 allow-scriptsallow-same-origin,因為這會讓嵌入文件刪除 sandbox 屬性——使其安全性不高於根本不使用 sandbox 屬性。
  • 如果攻擊者可以在沙箱 iframe 之外顯示內容(例如,如果檢視者在新標籤頁中開啟框架),則沙箱將毫無用處。此類內容也應來自單獨的源以限制潛在的損害。

注意:從具有 sandbox 屬性的 <iframe> 內的嵌入頁面重定向使用者、開啟彈出視窗或開啟新標籤頁時,新的瀏覽上下文將受到相同的 sandbox 限制。這可能會導致問題——例如,如果嵌入在沒有設定 sandbox="allow-forms"sandbox="allow-popups-to-escape-sandbox" 屬性的 <iframe> 中的頁面在新標籤頁中開啟一個新站點,則在新瀏覽上下文中的表單提交將靜默失敗。

src

要嵌入的頁面的 URL。使用 about:blank 值來嵌入符合同源策略的空頁面。另請注意,以程式設計方式刪除 <iframe> 的 src 屬性(例如,透過 Element.removeAttribute())會導致 Firefox(從版本 65 開始)、基於 Chromium 的瀏覽器和 Safari/iOS 在框架中載入 about:blank

注意:about:blank 頁面在解析任何相對 URL(例如錨鏈接)時,使用嵌入文件的 URL 作為其基本 URL。

srcdoc

要嵌入的內聯 HTML,覆蓋 src 屬性。其內容應遵循完整 HTML 文件的語法,包括 doctype 指令、<html><body> 標記等,儘管其中大多數可以省略,只留下主體內容。此文件將具有 about:srcdoc 作為其位置。如果瀏覽器不支援 srcdoc 屬性,它將回退到 src 屬性中的 URL。

注意:about:srcdoc 頁面在解析任何相對 URL(例如錨鏈接)時,使用嵌入文件的 URL 作為其基本 URL。

width

框架的寬度,以 CSS 畫素為單位。預設值為 300

已棄用的屬性

這些屬性已棄用,可能不再受所有使用者代理支援。您不應在新內容中使用它們,並嘗試從現有內容中刪除它們。

align 已棄用

此元素相對於周圍上下文的對齊方式。

frameborder 已棄用

1(預設值)會在該框架周圍繪製邊框。值 0 會刪除該框架周圍的邊框,但您應該改為使用 CSS 屬性 border 來控制 <iframe> 邊框。

longdesc 已棄用

框架內容的詳細描述的 URL。由於普遍濫用,這對非視覺瀏覽器沒有幫助。

marginheight 已棄用

框架內容與其頂部和底部邊框之間的空間量(以畫素為單位)。

marginwidth 已棄用

框架內容與其左側和右側邊框之間的空間量(以畫素為單位)。

scrolling 已棄用

指示瀏覽器何時應為框架提供捲軸

自動

僅當框架的內容大於其尺寸時。

始終顯示捲軸。

從不顯示捲軸。

指令碼

內聯框架(如 <frame> 元素)包含在 window.frames 偽陣列中。

使用 DOM HTMLIFrameElement 物件,指令碼可以透過 contentWindow 屬性訪問已加框架資源的 window 物件。contentDocument 屬性引用 <iframe> 內部的 document,與 contentWindow.document 相同。

從框架內部,指令碼可以使用 window.parent 獲取對其父視窗的引用。

對框架內容的指令碼訪問受同源策略的約束。如果指令碼是從不同的源載入的,則指令碼無法訪問其他 window 物件中的大多數屬性,包括框架內的指令碼訪問框架的父級。跨源通訊可以使用 Window.postMessage() 來實現。

定位和縮放

作為替換元素<iframe> 允許使用 object-position 屬性調整嵌入文件在其框內的位置。

注意:object-fit 屬性對 <iframe> 元素無效。

errorload 事件行為

<iframe> 上觸發的 errorload 事件可用於探測本地網路的 HTTP 伺服器的 URL 空間。因此,作為一項安全預防措施,使用者代理不會在 <iframe> 上觸發 error 事件,並且即使 <iframe> 內容載入失敗,也會始終觸發 load 事件。

無障礙訪問

使用輔助技術(如螢幕閱讀器)導航的使用者可以使用 <iframe> 上的title 屬性為其內容新增標籤。標題的值應簡潔地描述嵌入的內容

html
<iframe
  title="Wikipedia page for Avocados"
  src="https://en.wikipedia.org/wiki/Avocado"></iframe>

如果沒有此標題,他們必須導航到 <iframe> 中才能確定其嵌入的內容是什麼。這種上下文切換可能會令人困惑且耗時,尤其是在頁面包含多個 <iframe> 和/或嵌入包含影片或音訊等互動式內容的情況下。

示例

一個簡單的 <iframe>

此示例將 https://example.org 上的頁面嵌入到 iframe 中。這是 iframe 的常見用例:嵌入來自另一個站點的內容。例如,即時示例本身以及頂部的 試一試 示例都是來自另一個 MDN 站點的 <iframe> 嵌入。

HTML

html
<iframe
  src="https://example.org"
  title="iframe Example 1"
  width="400"
  height="300">
</iframe>

結果

在 <iframe> 中嵌入原始碼

此示例直接在 iframe 中呈現原始碼。這可以用作在顯示使用者生成的內容時(與 sandbox 屬性結合使用)防止指令碼注入的技術。

請注意,當使用 srcdoc 時,嵌入內容中的任何相對 URL 將相對於嵌入頁面的 URL 解析。如果要使用指向嵌入內容中的位置的錨鏈接,則需要顯式指定 about:srcdoc 作為基本 URL。

HTML

html
<article>
  <footer>Nine minutes ago, <i>jc</i> wrote:</footer>
  <iframe
    sandbox
    srcdoc="<p>There are two ways to use the <code>iframe</code> element:</p>
<ol>
<li><a href=&quot;about:srcdoc#embed_another&quot;>To embed content from another page</a></li>
<li><a href=&quot;about:srcdoc#embed_user&quot;>To embed user-generated content</a></li>
</ol>
<h2 id=&quot;embed_another&quot;>Embedding content from another page</h2>
<p>Use the <code>src</code> attribute to specify the URL of the page to embed:</p>
<pre><code>&amp;lt;iframe src=&quot;https://example.org&quot;&amp;gt;&amp;lt;/iframe&amp;gt;</code></pre>
<h2 id=&quot;embed_user&quot;>Embedding user-generated content</h2>
<p>Use the <code>srcdoc</code> attribute to specify the content to embed. This post is already an example!</p>
"
    width="500"
    height="250"
></iframe>
</article>

以下是如何在使用 srcdoc 時編寫轉義序列

  • 首先,編寫 HTML,轉義您在普通 HTML 文件中轉義的任何內容(例如 <>& 等)。
  • &lt;<srcdoc 屬性中表示完全相同的字元。因此,要使其成為 HTML 文件中的實際轉義序列,請將任何與號 (&) 替換為 &amp;。例如,&lt; 變為 &amp;lt;&amp; 變為 &amp;amp;
  • 將任何雙引號 (") 替換為 &quot; 以防止 srcdoc 屬性過早終止(如果使用 ',則應將 ' 替換為 &apos;)。此步驟發生在上一步驟之後,因此在此步驟中生成的 &quot; 不會變為 &amp;quot;

結果

技術摘要

內容類別 流內容短語內容、嵌入內容、互動式內容、可感知內容。
允許的內容 無。
標記省略 無,起始和結束標記都是必需的。
允許的父級 任何接受嵌入內容的元素。
隱式 ARIA 角色 沒有相應的角色
允許的 ARIA 角色

applicationdocumentimgnonepresentation
DOM 介面 HTMLIFrameElement

規範

規範
HTML 標準
# the-iframe-element

瀏覽器相容性

BCD 表格僅在瀏覽器中載入

另請參閱