クロスドメイン環境の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
参考サイト
関連記事
-
-
Gif画像に再生ボタンを設置し、ユーザーの操作により再生⇔停止が行える「gifffer」ライブラリの利用方法
あるページにGif画像を設置し、当該画像が表示されても自動再生させず、再生ボタン ...
-
-
formのtextareaに文字を入力した内容をリアルタイムプレビューする方法
textarea内に書いた内容をリアルタイムでプレビューする機能が必要になった。 ...
-
-
Leafletにタグフィルター機能を実装できる「leaflet-tag-filter-button」プラグインの利用方法
以前にLeafletでマーカーをグループ化し、チェックボックスの状態により表示非 ...
-
-
無料でシンプルなアイコンを設置できる「Feather」の利用方法
ページ上にアイコンを表示したい場合Font Awesomeを使うことが多いが、個 ...
-
-
jQueryプラグインでクリップボードにコピーする方法(clipboard.js)
ページ上のボタンをクリックすることで特定の文章をクリップボードにコピーしたかった ...