STERFIELD
開発ナレッジ2020.02.13

【JavaScript】PostMessageを使ったクロスドメインでのデータ通信

別タブやiframeで呼び出したページとの間で安全に情報を共有する方法として、PostMessageを使った方法があります。

かつては親windowからiframeや別タブの要素の情報を取得することが可能な時代もありましたが、今はセキュリティの問題からできません。
そこでwindow間で安全に情報を共有する方法として誕生したのがPostMessageです。

PostMessageでは呼び出す側、呼び出される側でルールを決めておいて、そのルールに則って情報を共有して処理を行うことになります。
この機能が使われている代表的なものとしては、埋め込み型のYouTubeがあります。
https://developers.google.com/youtube/iframe_api_reference?hl=ja

今回はその方法をご紹介いたします。

↓つくってみたもの
DEMO

メッセージを送る

親windowから子windowへメッセージを送る

子windowから親windowへメッセージを送る

メッセージを受け取る

メッセージを受け取る側では、windowを指定することができないため、
予め送受信するオブジェクトにactionを設定するなどルールを決めておくのが良いと思います。

[2022.2.3追記]
メッセージを受け取るときに送信元のwindowのドメインが明確な場合は、チェックすることが強く推奨されていましたので、
その表記を追加いたしました。(以下の箇所)

参考にさせていただいたサイト

window.postMessage – Web API | MDN

document.referrerでiframeからクロスドメインの親ページのURLを取得できる理由について – yn2011’s blog

WRITER

ninomiya

Webデザイナー兼コーダー出身のフロントエンド開発者です。 UXデザインやチーム開発の効率化など、勉強中です。

この著者の記事を見る

CONTACT

記事の内容について
相談したい方へ

実際の進め方は、状況を伺ってからご提案します。

2営業日以内にご返信します
資料ダウンロード無料相談に申し込む