iframe要素

今回はiframe要素を紹介します。iframe要素とは、新しいブラウジングコンテキストを作り文書中に配置するものです。

分かりにくい言い方ですが、あるページの中に、別のページを表示する枠のようなものを置くということです。

このような概念はフレームと呼ばれます。iframe要素で作られるフレームはインラインフレームと呼ばれます。

基本的な使い方

まず、src属性で、このブラウジングコンテキストに入れるページのアドレスを指定します。

例えば、<iframe src="http://google.com/"></iframe>のようにした場合、次のようになります。

枠ができてGoogleが表示されたと思います。

また、width属性height属性があり、これによりインラインフレームの大きさを指定できます。

さらにname属性があり、これがブラウジングコンテキストです。前回target属性を紹介しましたが、ここでこの名前を指定すると、そのフレームの中身が変わります。

例えば、Yahoo!このリンクをクリックしてみましょう。target属性をさっきのフレームの名前にしているので、フレームが変わると思います。

srcdoc属性

さらに、特徴的な属性として、srcdoc属性があります。これは、中に表示されるページをURLで指定するのではなく、HTMLで直接書いて指定します。つまり、こういうことです。


<iframe srcdoc="<!doctype html>
<html><head><title>test</title></head>
<body><p>test</p></body></html>"></iframe>

という感じです。これを実際に試すとこうなります:(現在()まだ対応しているブラウザは無いようです)

このように、属性中に改行を入れることもできます。例えば、title属性も、属性中に改行がある場合それを無視されずに読み込まれます。

また、DOCTYTPE宣言は省略してもよいことになっています。

ちなみに、iframe要素は特に中に何も入れる必要はないように思われますが、空要素ではありません。

といっても、実際何も入れる必要はありません。ただ、終了タグ</iframe>は忘れないようにしましょう。

さて、次にseemless属性を紹介します。これは論理属性で、この属性があるとiframe要素で表示されている文書が親の文書(iframe要素がある文書)と同化します。つまり、境目が無いような感じで表示されます。また、iframe内でリンクを移動した際、通常はiframe内だけ変化するのが、親の文書ごと変化したりするなどの違いもあります。

これを利用して、srcdoc属性とseemless属性を組み合わせることで、iframeのsrcdoc属性に書いたHTMLを文書に直接書かれているかのように表示することができます。

それならiframeなんか使わずに普通に書けと思うかもしれませんが、実はiframe属性を使うメリットがあります。

sandbox属性

そこで登場するのがsandbox属性です。この属性があると、そのインラインフレームをサンドボックス化することができます。

サンドボックス化されたiframeの中では、フォームやスクリプト(主にJavaScript)が無効化され、さらに同じドメインの場合でも異なるドメインのページとして扱われます。異なるドメインだとどうなるかというと、JavaScriptなどで干渉できなくなります。

ただ、sandbox属性の中身によって制限をゆるくすることができます。いくつかの値をスペースで区切ることで、その値が適用されます。

allow-same-origin
同じドメインのページは同じドメインとして扱うようにする。
allow-forms
フォームを有効にします。
allow-scripts
スクリプトを有効にします。

つまり、sandbox=""という状態が一番厳しい状態ということになります。

それで、このsandbox属性の使い道ですが、前述のsrcdoc属性,seemless属性と組み合わせて使うことができます。つまり、掲示板あるいはチャットなどで、変な内容を書かれたらスクリプトなどが動いたりして(いわゆるXSS)困るかもしれません。

そんなとき、このiframe要素を使ってしまえばスクリプト無効で安全です。

しかし、掲示板の書き込み程度でいちいちsrcdoc属性の中に<html>…</html>を書くのは面倒ですね。実は、タグというのは省略できるものが多いので、これはだいぶ簡潔になります。次回、省略について解説します。

iframe要素

要素の種類

フレージング・コンテンツ

インタラクティブ・コンテンツ

埋め込みコンテンツ

古いブラウザ用のテキスト。

意味

埋め込まれたブラウジングコンテキスト。

属性

name
ブラウジングコンテキストの名前。
src
表示するページのURL。
srcdoc
表示する文書。
sandbox
サンドボックス化と緩和する条件。
seamless
論理属性。親のページと同化するかどうか
width
幅。
height
高さ。