STERFIELD

2020/02/13

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

【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

Author Profile

著者近影

NINOMIYA

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

SHARE

合わせて読みたい