クロスドメインのiframeで子フレームから親フレームにheightの値を渡す
2014/07/09
やりたかった事は、
・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
関連記事
-
-
Leafletでマップ上に通知(トースト)機能を追加する方法(Leaflet.Notifications)
Leafletでマーカー内のボタンクリック時等、ユーザーが何らかのアクションを行 ...
-
-
jQueryでページ表示時にラジオボタンやチェックボックスにcheckedがついている場合にイベントを実行する方法
ラジオボタンやチェックボックスをチェックした際に、jQuery側で何らかのイベン ...
-
-
JavaScriptで配列やオブジェクトの値を検索する方法
JavaScriptにて配列やオブジェクトの値を検索する際、今までだとループを回 ...
-
-
架空の地図画像をLeafletを用いてWeb上でマップ表示する方法
ゲーム攻略サイト等でゲーム内の地図をWeb上で表示し、マーカーを立てたりマウスホ ...
-
-
SortableJSを使ってデータの並べ替え&保存
あるシステムを拝見した際にtableタグ内に並んでいる項目をドラッグ&ド ...