クロスドメイン環境のiframeで子フレームから親フレームに値を渡す方法
2026/08/11
クロスドメインの環境でiframeを使用しており、子フレーム側から親フレーム側に値を渡し、親フレーム側にてJavaScriptで何らかの処理を行いたかった。調べたところJavaScriptのwindow.postMessageメソッドを使用するのがよさそう。以下に実装方法をメモ。
目次
やりたいこと
- クロスドメイン環境のiframeで子フレーム側のbody要素のheightの値を親フレームに送信
- 親フレーム側でiframeタグのheightを動的に変更
ソースコード
親フレーム側
<iframe id="test_id_2" src="https://child.com/child.html" scrolling="no"></iframe>
<script>
//postMessageを受信した場合にreceiveSize関数を実行
window.addEventListener('message', receiveSize, false);
function receiveSize(e) {
//オリジンが子フレーム側のドメインの場合
if( e.origin === 'https://child.com' ){
//iframeのheightを変更
document.getElementById('test_id_2').style.height = `${e.data}px`;
}
}
</script>
子フレーム側
<div id="test_id_1" style="height: 1000px; background:red;"></div>
<script>
//ページ読み込み時にpostSize関数を実行
window.addEventListener('load', postSize, false);
function postSize(e){
let target;
//通常の最新ブラウザの場合
if( parent.postMessage ){
target = parent;
//IE8などの特殊な環境の場合
}else if(parent.document && parent.document.postMessage) {
target = parent.document;
//postMessage非対応のブラウザの場合
}else{
target = undefined;
}
//postMessageに対応しておりbodyのheightが取得できている場合は送信
if( typeof target != 'undefined' && document.body.scrollHeight ){
target.postMessage(document.getElementById('test_id_1').scrollHeight, '*');
}
}
</script>
クロスドメインじゃない場合
クロスドメインではなく同一ドメインで実装したいような場合はBroadcast Channel APIを使用する方がスマートに実装できそう。
リファレンス
Window: postMessage() method
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
参考サイト
関連記事
-
-
Video.jsの動画プレイヤーにVTTファイルで字幕機能を実装する方法
Video.jsの動画プレイヤーに字幕機能を実装したい。調べたところVTT(Vi ...
-
-
表示範囲を自由に変更可能な折れ線グラフが表示できるJSライブラリ amCharts の使用方法
どこかのサイトを閲覧していた際に、恐らくはJavaScriptのライブラリで描写 ...
-
-
reCAPTCHA v2でAjaxは使わずにチェック状況を確認する方法
reCAPTCHA v2を実装する案件があり以前の記事を参考に組み込んでみたもの ...
-
-
jQueryのloadメソッドでファイル(ページ)を呼び出す
サイト内でヘッダーやフッター等共通のパーツはそれぞれ別ファイルに分けてPHPのi ...
-
-
ブラウザ開発者ツールの起動を検出しソースコード変更やリダイレクト設定できる「console-ban」ライブラリの利用方法
他サイトのソースコードを拝見するため開発者ツールを開こうとすると、偶に「デバッガ ...