勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

クロスドメインのiframeで子フレームから親フレームにheightの値を渡す

   2014/07/09  JavaScript

やりたかった事は、

・iframeで子フレームから親フレームにheightの値を渡して、
親フレームの枠を自動で調整したい
・クロスドメインな状況
・子フレーム側の操作によってサイズが変わる

というもの。

 

■子フレーム側

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<script type="text/javascript">
window.addEventListener("load", postSize, false);
function postSize(e){
 var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined);
 if (typeof target != "undefined" && document.body.scrollHeight) {
   target.postMessage(document.getElementById("foo").scrollHeight, "*");
 }
}
</script>
</head>
<body>
 <div id="foo" style="height: 1500px; background:red;"></div>
</body>
</html>

 

■親フレーム側

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type="text/javascript">
window.addEventListener("message", receiveSize, false);
function receiveSize(e) {
 if (e.origin === "http://aaa.com") { //子フレームのドメイン入れる
   console.log(e.data); //ここにheightの値入る
 }
}
</script>
</head>
<body>
 <iframe id="bar" src="http://aaa.com/iframe.html" scrolling="no" >
 </iframe>
</body>
</html>

 

 

■参考サイト
http://d.hatena.ne.jp/bannyan/20090820/1250789189
http://sugilog.hatenablog.com/entry/20111130/1322653985

 

■その他
子フレーム側はonClickとか好きに呼び出せば良し。

postMessageって何、となったので調べると
「安全にクロスドメイン通信を可能にするためのメソッド」らしい。

https://developer.mozilla.org/ja/docs/DOM/window.postMessage

 - JavaScript

  関連記事

Leafletで表示したマップにジェスチャーハンドリングを追加する方法(Leaflet.GestureHandling)

GoogleMapをズームする際にPCだと「Ctrl+スクロール」、スマホだと「 ...

reCAPTCHA v2でAjaxは使わずにチェック状況を確認する方法

reCAPTCHA v2を実装する案件があり以前の記事を参考に組み込んでみたもの ...

SNSのシェア(いいね)ボタンを設置できるjQueryプラグイン「jsSocials」の利用方法

サイト内にSNSのシェア(いいね)ボタンを設置する際、WordPressだと何ら ...

Javascript / jQueryにて特定の要素内の文字数が〇文字以上の場合に丸める方法

サイトの特定の要素内の文字数が〇文字以上の場合に「コンテンツコンテ……」のように ...

jQueryにてボタンをクリックするとAjax通信し結果をテキストボックスに反映する方法

jQueryを利用しページ内の特定のボタンをクリックすると、指定のページにAja ...