クロスドメイン環境の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
参考サイト
関連記事
-
-
郵便番号を入力すると住所を自動で入力してくれる「ajaxzip3」ライブラリの利用方法
お問い合わせフォームのようなページで郵便番号及び住所欄がある場合、ユーザーが郵便 ...
-
-
Ajaxで負荷軽減
業務中、専用のページでfile_get_contents的なものは あまり使わな ...
-
-
JavaScriptにてHTML文字列をDOMノードに変換する方法
先日jQueryにて$.parseHTML()を用いてHTML文字列をDOMノー ...
-
-
JavaScript / jQueryでブラウザのウィンドウがアクティブかどうかを判別する方法
ある動画サイトを閲覧していた際にウィンドウが非アクティブになると視聴中の動画が止 ...
-
-
formのpasswordとtextをjQueryで切り替える方法
formでtype="password"を指定していると内容を入力した際に「●● ...