HTML: HTML iframe

<iframe>(インラインフレーム)を使うと、現在のページ内に別のHTMLページを埋め込めます。動画、地図、他のウェブページなど、iframeはウェブ開発に欠かせないツールです。

1. iframeの基本

<iframe src="URL"></iframe> で別のウェブページを現在のページに埋め込めます。widthheight 属性で表示サイズを制御します。

▶ サンプル

HTML
<!-- シンプルなページを埋め込み、幅600px、高さ400px -->
<iframe src="https://example.com" width="600" height="400">
お使いのブラウザはiframeをサポートしていません。
</iframe>
▶ 試してみよう

2. iframeの属性解説

iframeには埋め込み動作を制御するいくつかの属性があります。

name 属性と target を組み合わせると、リンクをiframe内で開くことができます。

▶ サンプル

HTML
<!-- 名前付きiframe -->
<iframe src="about:blank" name="content-frame"
width="100%" height="300"></iframe>

<!-- targetを使ってリンクをiframe内で開く -->
<a href="https://www.wikipedia.org" target="content-frame">
Wikipediaをiframeで開く
</a>
<a href="https://www.example.com" target="content-frame">
Exampleをiframeで開く
</a>
▶ 試してみよう
💡 アクセシビリティ最優先:iframeの title 属性は必須です ― スクリーンリーダーがこれを読み上げ、視覚障害のあるユーザーが埋め込みコンテンツを理解するのに役立ちます。ページ上に表示されなくても、すべてのiframeに意味のある title を必ず追加してください。


3. iframeのセキュリティ ― sandbox属性

sandbox 属性はiframe内のコンテンツに追加の制限を課し、重要なセキュリティ対策です。フォーム送信、ポップアップ、スクリプト実行などの動作を制限できます。

HTML
<!-- 最も厳格なsandbox:すべての高度な機能を無効化 -->
<iframe src="https://example.com" sandbox=""></iframe>

<!-- スクリプトを許可するが、フォーム送信とポップアップをブロック -->
<iframe src="https://example.com" sandbox="allow-scripts"></iframe>

<!-- スクリプトとフォームを許可するが、ポップアップやナビゲーションなどはブロック -->
<iframe src="https://example.com"
sandbox="allow-scripts allow-forms"></iframe>

4. サードパーティコンテンツの埋め込み

実際の現場で最も一般的なiframeの使用法は、YouTube動画やGoogleマップなどのサードパーティサービスのコンテンツを埋め込むことです。

▶ サンプル

HTML
<!-- YouTube動画を埋め込む -->
<iframe width="560" height="315"
src="https://www.youtube.com/embed/VIDEO_ID"
title="YouTube動画プレーヤー"
allow="accelerometer; autoplay; clipboard-write;
encrypted-media; gyroscope; picture-in-picture"
allowfullscreen></iframe>

<!-- Googleマップを埋め込む -->
<iframe width="600" height="450"
src="https://www.google.com/maps/embed?pb=..."
title="Googleマップ"
allowfullscreen
loading="lazy"></iframe>
▶ 試してみよう

サードパーティコンテンツを埋め込む際、プラットフォームは通常、共有/埋め込みオプションで既製のiframeコードを提供しています ― コピー&ペーストするだけです。title 属性と loading="lazy" を必ず含めて、読み込みパフォーマンスを最適化してください。


5. iframeと親ページの通信の概要

iframeと親ページが同じオリジン(同じプロトコル、ドメイン、ポート)の場合、JavaScriptを介して互いのDOMに直接アクセスできます。クロスオリジンの場合は、HTML5が提供する postMessage API を使って安全に通信します。

HTML
<!-- 親ページがメッセージを送信 -->
<iframe src="https://other-domain.com/page"
id="myFrame" title="クロスオリジンページ"></iframe>
<script>
var frame = document.getElementById('myFrame');
frame.contentWindow.postMessage('こんにちは、iframe!', 'https://other-domain.com');
</script>

<!-- iframe内部でメッセージを受信(埋め込みページに記述する必要あり) -->
<script>
window.addEventListener('message', function(event) {
// 常にオリジンを検証!
if (event.origin !== 'https://parent-domain.com') return;
console.log('受信しました:', event.data);
});
</script>

🔒 セキュリティヒント:postMessage を使用する際は、event.origin 以外のものを決して信頼しないでください。常にメッセージの発信元を検証し、信頼できないドメインに機密データを送信しないようにしてください。

❓ よくある質問

Q iframeにはどのようなセキュリティリスクがありますか?
A 主なリスク:1)クリックジャッキングで、攻撃者があなたのページを悪意のあるサイトに埋め込み、ユーザーを騙してクリックさせる;2)クロスサイトスクリプティングで、埋め込まれたコンテンツが悪意のあるJavaScriptを実行する可能性がある;3)データ漏洩で、悪意のあるiframeがユーザー情報を窃取する可能性がある。保護策:sandboxで機能を制限し、allowで精密な権限制御を行い、X-Frame-Optionsヘッダーで埋め込みを防止します。
Q iframeはSEOにどのような影響を与えますか?
A 検索エンジンはiframeコンテンツのインデックス能力が限られています:1)iframe内のテキスト、リンク、画像は親ページのSEOにカウントされない可能性がある;2)iframeはページの読み込み時間を増加させ、Core Web Vitalsスコアに影響する;3)モバイル体験が損なわれる可能性がある。推奨事項:重要なコンテンツはメインページに配置し、iframeには動画、マップ、その他のサードパーティコンテンツの埋め込みのみに使用します。
Q sandbox属性とは何ですか?
A sandboxはiframeに「サンドボックス」を作成し、デフォルトですべての危険な操作(スクリプト、フォーム、ポップアップなど)を無効にします。権限を段階的に有効にできます:sandbox="allow-scripts"はJavaScriptを許可し、sandbox="allow-forms"はフォーム送信を許可し、sandbox="allow-same-origin"はCookieへのアクセスを許可します。複数の権限はスペースで区切ります。推奨事項:常にsandboxを使用し、実際に必要な権限のみを有効にします。
Q iframeと<embed>/<object>の違いは何ですか?
A <iframe>はHTMLページの埋め込み専用で、完全な機能サポート(サンドボックス、postMessageなど)があります。<embed><object>は非HTMLコンテンツ(PDF、Flash、SVGなど)を埋め込みます。HTML5では、<embed>は空タグで、<object>はフォールバックコンテンツ(<param>とフォールバック)を含めることができます。推奨事項:ウェブページには<iframe>を使い、PDFには<embed>または<object>を使います。

📖 まとめ

📝 練習問題

  1. 最初の動画を埋め込む: YouTube動画を見つけ、その埋め込みコードをコピーしてHTMLファイルに貼り付けてください。title 属性と loading="lazy" を必ず追加してください。
  2. Sandbox実験: iframeを作成し、まず sandbox=""(最も厳格なモード)から始めて、徐々に allow-scriptsallow-forms を有効にし、動作がどのように変化するか観察してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%