現役システムエンジニアの備忘録

技術スキルや用語などの記録を残していきます

Frame(フレーム・親子ウィンドウ)

【JavaScript入門】postMessageの使い方|iframe・別ウィンドウ間で安全にデータを送受信する方法を初心者向けに解説

投稿日:2026年5月11日 更新日:

この記事で分かること

  • postMessage を使ったフレーム間通信の基本
  • iframe・別ウィンドウ・親子ウィンドウ間でのデータ送受信
  • origin チェックによるセキュリティ対策
  • 実務での利用例と注意点

JavaScript の postMessage は、iframe や別ウィンドウ間で安全にデータをやり取りするための重要な仕組みです。
この記事では、フレーム間通信の基本から origin チェックによるセキュリティ対策、実務での利用例まで分かりやすく解説します。



postMessage とは?

postMessage は、異なるウィンドウ・タブ・iframe 間で
安全にデータを送受信するための仕組みです。

通常、JavaScript は 同一オリジン制限 により、
別ドメインの iframe やウィンドウを操作できません。

しかし postMessage を使うと、
異なるドメイン間でも安全に通信が可能 になります。

基本構文(送信側)


targetWindow.postMessage("メッセージ内容", "https://example.com");
  • 第一引数:送るデータ(文字列・オブジェクト)
  • 第二引数:送信先の origin(必須)

基本構文(受信側)


window.addEventListener("message", (event) => {
  console.log(event.data);
});

event.data に送られてきたデータが入ります。



iframe → 親ウィンドウへ送信する例

iframe 内のページから親ウィンドウへメッセージを送る例です。


// iframe 内のコード
window.parent.postMessage("Hello Parent!", "https://example.com");

親ウィンドウ → iframe へ送信する例


const iframe = document.getElementById("myFrame");
iframe.contentWindow.postMessage("Hello iframe!", "https://child.example.com");

受信側のセキュリティ(origin チェック)

postMessage を使う際に最も重要なのが
origin チェック です。


window.addEventListener("message", (event) => {
  if (event.origin !== "https://example.com") return;

  console.log("安全なメッセージ:", event.data);
});

origin をチェックしないと、
悪意あるサイトからメッセージを受け取ってしまう可能性があります。

オブジェクトを送ることも可能


window.postMessage({ type: "login", user: "shin" }, "https://example.com");

オブジェクトを送ることで、
より複雑なデータ通信が可能になります。

実務での利用例

  • 外部サービスのウィジェット通信
  • 広告 iframe とのデータ連携
  • 決済ページとの安全な通信
  • SPA と iframe の連携

特に「外部サービスの埋め込み」では
postMessage が必須技術になっています。

JavaScript 初心者におすすめの学習書籍

書籍で学ぶのが向いている人

  • postMessage を使ったフレーム間通信の仕組みを体系的に理解したい
  • iframe・別ウィンドウ・親子ウィンドウ間のデータ連携を基礎から学びたい
  • セキュリティ(origin チェック)を含めて正しい実装を身につけたい

postMessage は、異なるドメイン間でも安全に通信できる唯一の標準API です。
書籍では JavaScript の基本構造・イベント処理・ブラウザの仕組みを順序立てて学べるため、
フレーム間通信の理解がより深まります。

いちばんやさしい JavaScript の教本

図解が多く、JavaScript の基本文法やブラウザの動作を視覚的に理解できる入門書です。
iframe の仕組みやイベント処理など、postMessage を理解する前提知識をしっかり固められます。

この本で解決できること:

  • ウィンドウ・フレームの仕組みを基礎から理解できる
  • イベント処理や非同期処理など、postMessage と相性の良い基礎が身につく
  • ブラウザ間通信の前提となる JavaScript の土台を固められる

確かな力が身につく JavaScript「超」入門

実務的な JavaScript を学びたい方に最適な入門書です。
ウィンドウ操作・イベント・非同期処理など、postMessage を使う際に必要な知識が体系的に学べます。

この本で解決できること:

  • ウィンドウ間通信の基礎となるイベント処理・非同期処理が理解できる
  • iframe や外部サービス連携の基礎が身につく
  • 実務で必要なセキュリティ意識(origin チェック)を学べる

動画で理解を深めたい方へ(Udemy講座)

postMessage のようなフレーム間通信は、
実際の画面遷移やウィンドウ間の動きを見ながら学ぶと理解が一気に深まります。
動画では「送信 → 受信 → origin チェック」の流れがそのまま確認でき、
初心者でも直感的に理解できます。

初心者のためのJavaScript 完全入門

JavaScript の基礎・イベント処理・非同期処理など、postMessage を理解するための土台を体系的に学べる人気講座です。

この講座で解決できること:

  • ウィンドウ・iframe の仕組みを視覚的に理解できる
  • イベント処理と非同期処理の流れが明確になる
  • postMessage の前提となるブラウザの動作理解が深まる

初心者のためのJavaScript 完全入門(Udemy)

超JavaScript 完全ガイド 2026

実務で必要なブラウザ操作・外部サービス連携・セキュリティなど、
postMessage を使う場面に直結する知識を深く学べる講座です。

この講座で解決できること:

  • postMessage を使った実践的なフレーム間通信が理解できる
  • 外部サービスとの安全なデータ連携の考え方が身につく
  • origin チェックなど実務的なセキュリティ知識が習得できる

超JavaScript 完全ガイド 2026(Udemy)

体系的に学びたい方へ(スクールという選択肢)

独学の限界を感じやすいポイント

  • postMessage の仕組みが断片的な理解になりやすい
  • iframe・別ウィンドウ・親子ウィンドウの関係が複雑に感じる
  • セキュリティ(origin チェック)でつまずいても相談できない
  • 実務レベルの外部サービス連携の知識が身につきにくい

スクールでは、プロの講師が学習ロードマップを作成し、
postMessage を含むフレーム間通信や
JavaScript の基礎を体系的に理解できるようサポートしてくれます。

無料相談で得られるメリット

  • あなたのレベルに合わせた学習計画を作成
  • フレーム間通信や外部サービス連携の理解を深めるアドバイスがもらえる
  • 効率的な学習方法をプロが提案
  • エンジニア転職を視野に入れたキャリア相談も可能

JavaScript を効率よく学びたい方には、未経験からエンジニアを目指せる
DMM WEBCAMP の学習コースも選択肢のひとつです。

DMM WEBCAMP 学習コース(無料相談はこちら)



postMessage に関するよくある質問(FAQ)

Q1

postMessage は異なるドメインでも使えますか?

A

はい、使えます。同一オリジン制限を超えて通信できる数少ないAPIです。

Q2

origin チェックは必須ですか?

A

必須です。チェックしないと悪意あるサイトからメッセージを受け取る危険があります。

Q3

iframe 内の DOM を postMessage で操作できますか?

A

DOM を直接操作することはできません。postMessage はデータ通信のみです。

Q4

postMessage はどんな場面で使われますか?

A

外部サービスの埋め込み、広告、決済ページ、ウィジェット通信など、異なるドメイン間の連携で広く使われます。



まとめ

postMessage は、iframe や別ウィンドウ間で
安全にデータを送受信できる唯一の標準API です。

同一オリジン制限を超えて通信できるため、
現代の Web アプリケーションでは欠かせない技術です。

ただし、セキュリティのために
origin チェックは必ず行う ようにしましょう。



関連記事

【JavaScript入門】frame.nameの使い方|フレーム名を取得する方法をわかりやすく解説

この記事で分かること frame.name の基本的な役割 フレーム名(name 属性)の取得方法 frames 配列との組み合わせ方 フレーム名を使うメリット HTML5 以降の注意点(非推奨・同一 …

【JavaScript入門】iframeとframesetの違いを解説|歴史・仕様・現代の使い方を初心者向けにわかりやすく紹介

この記事で分かること iframe と frameset の歴史と役割の違い frameset が廃止された理由 iframe が現代Webで主流になった背景 同一オリジン制限や実務での注意点 HTM …

【JavaScript入門】frame.locationの使い方|フレームのURL(URI)を参照する方法をわかりやすく解説

この記事で分かること frame.location の基本的な役割 フレームが表示しているURL(URI)の取得方法 frames 配列との組み合わせ方 親フレーム・トップフレームからの参照方法 HT …

【JavaScript入門】iframeのcontentWindow・contentDocumentの使い方|内部ページの操作方法を初心者向けに解説

この記事で分かること iframe の contentWindow と contentDocument の違い iframe 内部の DOM を操作する方法 同一オリジン制限でできること・できないこと …

【JavaScript入門】window.openとopenerの使い方|親ウィンドウ・子ウィンドウの関係を初心者向けに解説

この記事で分かること window.open で新しいウィンドウを開く方法 opener を使った親ウィンドウ・子ウィンドウの関係 親ウィンドウから子ウィンドウを操作する方法 noopener などの …

このブログは Xserver 上の WordPress で運用しています。
表示速度が速く、安定しているのでブログ初心者にもおすすめです。

レンタルサーバー エックスサーバー

-Frame(フレーム・親子ウィンドウ)

執筆者: