HTML 的 iframe
標籤
了解使用 HTML 的 iframe
標籤的基礎知識
iframe
標籤允許我們將來自其他來源(其他網站)的內容嵌入我們的網頁中。
從技術上講,iframe 創建了一個嵌套的瀏覽上下文。這意味著 iframe 中的任何內容都不會干擾父頁面,反之亦然。JavaScript 和 CSS 不會「洩漏」到/從 iframe 中。
許多網站使用 iframe 執行各種操作。你可能熟悉 Codepen、Glitch 或其他允許你在頁面的一部分中編寫代碼並在框中查看結果的網站。這就是一個 iframe。
你可以通過以下方式創建一個 iframe:
1 | <iframe src="page.html"></iframe> |
你也可以加載絕對 URL:
1 | <iframe src="https://site.com/page.html"></iframe> |
你可以設置一組寬度和高度參數(或使用 CSS 設置它們),否則 iframe 將使用默認值,即 300x150 像素的框:
1 | <iframe src="page.html" width="800" height="400"></iframe> |
Srcdoc
srcdoc
屬性允許您指定一些內嵌 HTML 以顯示。這是 src
的替代方案,但最近版本並不支持 Edge 18 及更低版本和 IE:
1 | <iframe srcdoc="<p>我的狗是一隻乖狗</p>"></iframe> |
沙盒
sandbox
屬性允許我們限制 iframe 中允許的操作。
如果省略它,則允許做任何操作:
1 | <iframe src="page.html"></iframe> |
如果將其設置為 “”,則不允許任何操作:
1 | <iframe src="page.html" sandbox=""></iframe> |
我們可以通過在 sandbox
屬性中添加選項來選擇允許的操作。您可以通過在它們之間添加空格來允許多個操作。以下是您可以使用的選項的不完整列表:
allow-forms
:允許提交表單allow-modals
:允許打開模態窗口,包括在 JavaScript 中調用alert()
allow-orientation-lock
:允許鎖定屏幕方向allow-popups
:允許彈出窗口,使用window.open()
和target="_blank"
鏈接allow-same-origin
:將正在加載的資源視為同一原始網站allow-scripts
:允許加載的 iframe 執行腳本(但不能創建彈出窗口)allow-top-navigation
:允許 iframe 訪問頂層瀏覽上下文
允許
這是目前的實驗性功能,僅受基於 Chromium 的瀏覽器支持,這是父窗口與 iframe 之間資源共享的未來。
它類似於 sandbox
屬性,但允許我們允許特定功能,包括:
accelerometer
:允許訪問 Sensors API 的加速度計接口ambient-light-sensor
:允許訪問 Sensors API 的環境光傳感器接口autoplay
:允許自動播放視頻和音頻文件camera
:允許從 getUserMedia API 訪問相機display-capture
:允許使用 getDisplayMedia API 訪問屏幕內容fullscreen
:允許訪問全屏模式geolocation
:允許訪問 Geolocation APIgyroscope
:允許訪問 Sensors API 的陀螺儀接口magnetometer
:允許訪問 Sensors API 的磁力儀接口microphone
:允許使用 getUserMedia API 訪問設備麥克風midi
:允許訪問 Web MIDI APIpayment
:允許訪問 Payment Request APIspeaker
:允許通過設備揚聲器播放音頻usb
:允許訪問 WebUSB APIvibrate
:允許訪問 Vibration APIvr
:允許訪問 WebVR API
Referrer
加載 iframe 時,瀏覽器會在 Referer
標頭中向其發送重要信息,該標頭指示誰在加載它(請注意單個 r
的拼寫錯誤,我們必須容忍)。
referrerpolicy
屬性允許我們在加載 iframe 時設置要發送的 referrer。referrer 是一個 HTTP 標頭,用於讓頁面知道誰在加載它。以下是允許的值:
no-referrer-when-downgrade
:這是默認值,當當前頁面在 HTTPS 上加載並且 iframe 在 HTTP 協議上加載時,它會發送 referrerno-referrer
:不發送 referrer 標頭origin
:發送 referrer,並且只包含原始網址(端口、協議、域名),而不是默認的原始網址 + 路徑origin-when-cross-origin
:在 iframe 中從同一原始網址(端口、協議、域名)加載時,以完整形式發送 referrer(原始網址 + 路徑)。否則,只發送原始網址same-origin
:僅在從 iframe 中的同一原始網址(端口、協議、域名)加載時發送 referrerstrict-origin
:如果當前頁面在 HTTPS 上加載並且 iframe 也在 HTTPS 協議上加載,則發送原始網址作為 referrer。如果 iframe 在 HTTP 上加載,則不發送任何內容strict-origin-when-cross-origin
:在同一原始網址工作時,以原始網址 + 路徑作為 referrer 發送。如果當前頁面在 HTTPS 上加載並且 iframe 也在 HTTPS 協議上加載,則發送原始網址作為 referrer。如果 iframe 在 HTTP 上加載,則不發送任何內容unsafe-url
:即使從 HTTP 加載資源並且當前頁面在 HTTPS 上加載,也會將原始網址 + 路徑作為 referrer 發送