概要
HTML インラインフレーム要素 (<iframe>) は、ブラウジングコンテキスト (browsing context) の入れ子を表現し、事実上現在のページに他の HTML ページを埋め込むことができます。HTML 4.01 では、文書は head および body、または head および frame-set を持つことができ、body と frame-set の両方は持ちません。しかし、<iframe> は通常の文書 body 内で使用できます。ブラウジングコンテキストはそれぞれ、セッション履歴とアクティブな文書を持ちます。埋め込みコンテンツを含む側のブラウジングコンテキストを、親ブラウジングコンテキストと呼びます。トップレベルのブラウジングコンテキスト(親を持ちません)は通常ブラウザウィンドウです。
| コンテンツカテゴリ | フローコンテンツ、フレージングコンテンツ、埋め込みコンテンツ、インタラクティブコンテンツ、パルパブルコンテンツ |
|---|---|
| 許可された内容 | 特殊。本文をご覧ください |
| タグの省略 | 不可。開始と終了タグの両方が必要。 |
| 許可された親要素 | 埋め込みコンテンツを受け入れるすべての要素。 |
| DOM インターフェイス | HTMLIFrameElement |
属性
この要素はグローバル属性を持ちます。
align非推奨 HTML4.01 廃止 HTML5- フレームを含むコンテキストに対する、フレームの整列方法を指定します。
allowfullscreenElement.requestFullScreen()を呼び出してフルスクリーンモードにできれば、この属性がtrueにセットされます。セットされていなければ、要素はフルスクリーンモードにできません。frameborderHTML 4 のみ- 値が 1 (デフォルト) なら、ブラウザはこのフレームと他のすべてのフレームの間にボーダーを描きます。値が 0 なら、他フレームとの間にボーダーは描かれません。
height- フレームの高さをHTML5CSS ピクセル、またはHTML 4.01ピクセルかパーセンテージで示します。
longdescHTML 4 のみ- フレームの長い説明の URI です。 広まっている誤用のせいで、非視覚ブラウザでは有益ではありません。
marginheightHTML 4 のみ- フレームのコンテンツと
topおよびbottomのマージン間の、ピクセル単位の余白量です。 marginwidthHTML 4 のみ- フレームのコンテンツと
leftおよびrightのマージン間の、ピクセル単位の余白量です。 mozallowfullscreen- 代わりに
allowfullscreenを使ってください。Gecko 9.0 以降では、フレームがelement.mozRequestFullScreen()メソッドを呼び出してフルスクリーンモードにできるならtrueにセットできます。セットされていなければ、その要素はフルスクリーンモードにできません。 webkitallowfullscreen- 代わりに
allowfullscreenを使ってください。Chrome 17 以降 (それ以前でもおそらく) では、フレームがelement.webkitRequestFullScreen()メソッドを呼び出してフルスクリーンモードにできるならtrueにセットできます。セットされていなければ、その要素はフルスクリーンモードにできません。 mozappOnly available on Firefox OS- open web app をホストするフレームで app manifest の URL を定義します。これは app が正しい権限を持って読み込まれることを保証します。詳細は Using the Browser API をご覧ください。Gecko 13.0 以降で利用可能です。
mozbrowserOnly available on Firefox OS- フレームが、トップレベルの閲覧ウィンドウであるように埋め込みコンテンツに現れることを示します。つまり、
window.top,window.parent,window.frameElementなどがフレームの階層構造を反映しないということです。これにより、正しい権限でもって完全にウェブ技術だけでウェブブラウザの UI を実装することができます。詳細は Using the Browser API をご覧ください。Gecko 13.0 以降で利用可能です。 name- 埋め込みのブラウジングコンテキスト(またはフレーム)の名前です。
<a>や<form>要素のtarget属性の値、もしくは<input>や<button>要素のformtarget属性の値として使えます。 referrerpolicy- リソースを読み込む際にどのリファラを使用するかを示す文字列です:
"no-referrer"は、Referer:ヘッダを送信しないことを表します。- "
no-referrer-when-downgrade" は、TLS (HTTPS) を使用せずに生成元へナビゲートする場合はReferer:ヘッダを送信しないことを表します。これは他にポリシーが定められていない場合の、ユーザエージェントのデフォルトの動作です。 "origin"は、ページの生成元 (大まかにいえば���キーム、ホスト、ポート) をリファラとすることを表します。- "origin-when-cross-origin" は、異なる生成元へのナビゲートではリファラをスキーム、ホスト、ポートに制限します。同一生成元へのナビゲートでは、リファラのパスも含めます。
"unsafe-url"は、リファラに生成元とパスを含めることを表します (ただし、フラグメント、パスワード、ユーザ名は含めません)。これは生成元やパスの情報が TLS で保護されたリソースからセキュアでない生成元へ漏えいしますので、安全ではありません。
remoteOnly available on Firefox OS- 別のコンテンツプロセスでフレームのページを読み込みます。
scrollingHTML 4 のみ- フレームにスクロールバー(もしくは他のスクロール用機能)をいつ表示するか決めるための列挙属性です:
auto: 必要なときだけ表示yes: 常にスクロールバーを表示no: スクロールバーを一切表示しない
sandboxHTML5 のみ- 空文字列として定義されると、インラインフレームに表示できるコンテンツに最大限の制限をかけることができます。もしくは特定の制限を取り除くトークンを空白区切りで与えることができます。以下は有効なトークンです:
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: (Chrome および Opera) サンドボックス化したドキュメントが、サンドボックスのフラグを強制されない新たなウィンドウを開けるようにします。これにより、例えばサードパーティの広告に、元のページと同じ制限を強制されない安全なサンドボックスを提供できます。allow-same-origin: コンテンツが通常のオリジンを持つとみなします。このキーワードが使われない場合は、埋め込みコンテンツは独自オリジンを持つとみなされます。allow-scripts: 埋め込みのブラウジングコンテキストにスクリプトの実行を許可します(ただしポップアップウィンドウは作れません)。このキーワードが使われない場合はこの操作は行えません。allow-top-navigation: 埋め込みのブラウジングコンテキストがトップレベルのブラウジングコンテキストのコンテンツを操作(読み込み)することを許可します。このキーワードが使われない場合はこの操作は行えません。
註:
- 埋め込み文書がメインページと同一オリジンを持つ場合、
allow-scriptsとallow-same-originの同時使用は、埋め込み文書がプログラムからsandbox属性を削除することができるようになるため、用いるべきではありません。容認されているとはいえ、sandbox属性を使わないのと同様に安全ではありません。 - サンドボックス化は一般に、攻撃者が潜在的な攻撃力を持つコンテンツを、ユーザブラウザのサンドボックス化した
iframeの外に表示するような準備ができるなら、最小限の助けにしかなりません。潜在的なダメージを抑えるため、そうしたコンテンツは別の専用ドメインから提供することが推奨されます。 sandbox属性は Internet Explorer 9 以前でサポートされていません。
src- 埋め込むページの URL。
srcdocHTML5 のみ- 埋め込みコンテキストを含めるページのコンテンツ。この属性は、一般的に sandbox および seamless 属性とともに使用すると想定されています。ブラウザが
srcdoc属性をサポートする場合は、src属性で指定したコンテンツより優先します。ブラウザがsrcdoc属性をサポートしない場合は、src属性でファイルを指定していれば、それを代わりに表示します。この属性の内容がscriptタグを含む場合、スクリプトを実行するためには、たとえスクリプトの後に何もなかったとしてもscriptの閉じタグが必須であることに注意してください。 width- フレームの幅をHTML5 CSS ピクセル、またはHTML 4.01ピクセルかパーセンテージで示します。
スクリプト操作
<frame> 要素のようなインラインフレームは window.frames 擬似配列に入ります。
スクリプトは DOM の iframe 要素から contentWindow プロパティを使って、それを含む HTML ページの window オブジェクトにアクセスできます。contentDocument プロパティは iframe の内側の document 要素を参照します (contentWindow.document と等価です)。これは Internet Explorer の IE8 以前のバージョンではサポートされていません。
スクリプトは、フレームの内側からは window.parent を使って親ウィンドウを参照できます。
フレームの内容にアクセスしようとするスクリプトは同一オリジンポリシーに従います。別のドメインから読み込まれたスクリプトは他の window オブジェクトのほとんどのプロパティにアクセスできません。これは、親ウィンドウにアクセスしようとするフレーム内のスクリプトにも当てはまります。それでもドメイン間のやりとりは window.postMessage で達成できます。
例
<iframe> 要素の使用例を示します。
シンプルな <iframe>
こちらが <iframe> の基本的な使用例です。フレームを作成した後に、ユーザーがボタンをクリックすると、タイトルを取得してアラートで表示します。
HTML
<iframe src="https://mdn-samples.mozilla.org/snippets/html/iframe-simple-contents.html" width="400" height="300"> <p>Your browser does not support iframes.</p> </iframe>
表示結果
<iframe> 内のリンクを別のタブで開く
このサンプルでは、Google マップを iframe 内で表示しています。
HTML
<base target="_blank">
<iframe id="Example2"
name="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>
表示結果
表示結果
注記
Gecko 6.0 以降では、インラインフレームは内包する要素のボーダーが border-radius で丸められているときも、それを考慮して正確に描画されます。
仕様
| 仕様書 | 策定状況 | コメント |
|---|---|---|
| Referrer Policy referrerpolicy attribute の定義 |
草案 | referrerpolicy 属性を追加。 |
| WHATWG HTML Living Standard <iframe> の定義 |
現行の標準 | |
| HTML5 <iframe> の定義 |
勧告 | |
| HTML 4.01 Specification <iframe> の定義 |
勧告 | |
| Screen Orientation API | 草案 | sandbox 属性に allow-orientation-lock を追加。 |
ブラウザ実装状況
| 機能 | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|---|
| 基本サポート | 1.0 | (有) | (有)[3] | (有) | (有) | (有) |
sandbox |
4.0 | (有) | 17.0 (17.0) | 10 | 15 | 5 |
seamless |
未サポート | 未サポート | 未サポート | 未サポート | 未サポート | 未サポート |
srcdoc |
20.0 | 未サポート | 25.0 (25.0) | 未サポート | 15 | 6 |
allowfullscreen |
17.0 webkit 27.0 |
(有) | 9.0 (9.0) moz 18.0 (18.0) |
11 ms |
(有) | (有) webkit 7 |
sandbox="allow-popups" |
? | (有) | 27.0 (27.0) | ? | ? | ? |
sandbox="allow-popups-to-escape-sandbox" |
46.0 | 未サポート | 49.0 (49.0) | ? | 32 | ? |
sandbox="allow-modals" |
? | ? | 49.0 (49.0) | ? | ? | ? |
referrerpolicy |
46.0 [1] | 未サポート | 42.0 (42.0) [2] | ? | ? | ? |
| 機能 | Android | Android Webview | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|
| 基本サポート | (有) |
(有) |
(有)[3] | (有) | (有) | (有) |
(有) |
sandbox |
2.2 |
(有) |
17.0 (17.0) | 10 | 未サポート | 4.2 |
(有) |
seamless |
? | ? | 未サポート | 未サポート | ? | ? | ? |
srcdoc |
? | ? | 25.0 (25.0) | 未サポート | ? | ? | ? |
allowfullscreen |
? | ? | 9.0 (9.0) moz 18.0 (18.0) |
未サポート | 未サポート | (有) webkit 7 |
? |
sandbox="allow-popups" |
? | ? | 27.0 (27.0) | ? | ? | ? | ? |
sandbox="allow-popups-to-escape-sandbox" |
未サポート | 46 | 49.0 (49.0) | ? | 32 | ? | 46.0 |
sandbox="allow-modals" |
? | ? | 49.0 (49.0) | ? | ? | ? | ? |
referrerpolicy |
未サポート | 46 [1] | ? | ? | ? | ? | 46.0 [1] |
[1] referrerpolicy として実装。flag で制御されています (crbug.com/490608)。
[2] referrer として実装。設定 network.http.enablePerElementReferrer で制御されています。Firefox 45 で referrerpolicy に改名しました。

