概要
HTML の <iframe> 要素 (またはHTML インラインフレーム要素) は、ブラウジングコンテキスト (browsing context) の入れ子を表現し、事実上現在のページに他の HTML ページを埋め込むことができます。HTML 4.01 では、文書は head および body、または head および frame-set を持つことができ、body と frame-set の両方は持ちません。しかし、<iframe> は通常の文書 body 内で使用できます。ブラウジングコンテキストはそれぞれ、セッション履歴とアクティブな文書を持ちます。埋め込みコンテンツを含む側のブラウジングコンテキストを、親ブラウジングコンテキストと呼びます。トップレベルのブラウジングコンテキスト(親を持ちません)は通常ブラウザウィンドウです。
- コンテンツカテゴリ フローコンテンツ、フレージングコンテンツ、埋め込みコンテンツ、インタラクティブコンテンツ、パルパブルコンテンツ
- 許可された内容 特殊。本文をご覧ください
- タグの省略 不可。開始と終了タグの両方が必要。
- 許可された親要素 埋め込みコンテンツを受け入れる全要素
- DOM インタフェース
HTMLIFrameElement
属性
この要素はグローバル属性を持ちます。
-
align非推奨 HTML4.01 廃止 HTML5 - フレームを含むコンテキストに対する、フレームの整列方法を指定します。
-
allowfullscreen -
element.mozRequestFullScreen()を呼び出してフルスクリーンモードにできれば、この属性が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属性の値として使えます。 -
remoteOnly available on Firefox OS - 別のコンテンツプロセスでフレームのページを読み込みます。
-
scrollingHTML 4 のみ -
フレームにスクロールバー(もしくは他のスクロール用機能)をいつ表示するか決めるための列挙属性です:
auto: 必要なときだけ表示yes: 常にスクロールバーを表示no: スクロールバーを一切表示しない
-
sandboxHTML5 のみ -
空文字列として定義されると、インラインフレームに表示できるコンテンツに最大限の制限をかけることができます。もしくは特定の制限を取り除くトークンを空白区切りで与えることができます。以下は有効なトークンです:
allow-same-origin: コンテンツが通常のオリジンを持つとみなします。このキーワードが使われない場合はと、埋め込みコンテンツは独自オリジンを持つとみなされます。allow-top-navigation: 埋め込みのブラウジングコンテキストがトップレベルのブラウジングコンテキストのコンテンツを操作(読み込み)することを許可します。このキーワードが使われない場合はこの操作は行えません。allow-forms: 埋め込みのブラウジングコンテキストにフォームの実行を許可します。このキーワードが使われない場合はこの操作は行えません。allow-scripts: 埋め込みのブラウジングコンテキストにスクリプトの実行を許可します(ただしポップアップウィンドウは作れません)。このキーワードが使われない場合はこの操作は行えません。
註:
- 埋め込み文書がメインページと同一オリジンを持つ場合、
allow-scriptsとallow-same-originの同時使用は、埋め込み文書がプログラムからsandbox属性を削除することができるようになるため、用いるべきではありません。容認されているとはいえ、sandbox属性を使わないのと同様に安全ではありません。 - サンドボックス化は一般に、攻撃者が潜在的な攻撃力を持つコンテンツを、ユーザブラウザのサンドボックス化した
iframeの外に表示するような準備ができるなら、最小限の助けにしかなりません。潜在的なダメージを抑えるため、そうしたコンテンツは別の専用ドメインから提供することが推奨されます。 sandbox属性は Internet Explorer 9 以前と Opera でサポートされていません。
-
seamlessHTML5 のみ -
ブラウザがインラインフレームを、それを含む文書の一部であるかのように表示させることを示す真偽値属性です。例えばインラインフレームを含む文書に対して、その文書で指定されるスタイルより先に
<iframe>に適用される CSS スタイルを適用したり、含まれている文書のリンクを親のブラウジングコンテキストで開いたりします (他の設定で回避しない場合)。XHTML では属性の最小化が禁止されており、seamless 属性は<iframe seamless="seamless">として定義しなければなりません。 -
src - 埋め込むページの URL。
-
srcdocHTML5 のみ -
埋め込みコンテキストを含めるページのコンテンツ。この属性は、sandbox および seamless 属性とともに使用すると想定されています。ブラウザが
srcdoc属性をサポートする場合は、src属性で指定したコンテンツより優先します。ブラウザがsrcdoc属性をサポートしない場合は、src属性でファイルを指定していれば、それを代わりに表示します。 -
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 で行えます。
例 1
<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>
例 2: iframe 内のリンクを別のタブで開く
<base target="_blank" /> <iframe width="400" height="215" 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 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3) 以降では、インラインフレームは内包する要素のボーダーが border-radius で丸められているときも、それを考慮して正確に描画されます。
仕様
| 仕様書 | 策定状況 | コメント |
|---|---|---|
| WHATWG HTML Living Standard | Living Standard | |
| HTML5 | 勧告候補 | |
| HTML 4.01 Specification | 勧告 |
ブラウザ実装状況
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|
| 基本サポート | 1.0 | (有) | (有) | (有) | (有) |
sandbox |
4 | 17.0 (17.0) | 10 | 15 | 5 |
seamless |
22 | 未サポート | ? | 15 | 6 |
srcdoc |
4 | 25.0 (25.0) | ? | 15 | ? |
allowfullscreen |
17 webkit Nightly build |
9.0 (9.0) moz 18.0 (18.0) |
未サポート | (有) | 未サポート |
| 機能 | Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| 基本サポート | (有) | (有) | (有) | (有) | (有) |
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) |
未サポート | 未サポート | 未サポート |