iframeについてメモ。
iframeはセキュリティーの都合上で、別ドメインでは値を渡せないらしい。
実際ためしてみても、うまく行かなかった。
使用用途としては、スクロールバーなどを表示させずにインラインフレームとして表示する場合に、横幅は100%で対応できても高さがページによって可変な場合がある。
この場合は、スクロールバーが表示されるか、やけに下に余白ができる感じになってしまい実用的ではない。
そこで、高さの値を子から親へ渡して、iframeの属性で高さを指定できるようにする。
色々調べて今のところこの方法でいけた。
でも、IE6~7までは見対応なのでそのへんはあしからず。逆に対応できる方法を知っている人教えてください。
それではやり方。
まず子のファイルに下記内容が飛鳥
<script type="text/javascript">
function onlo(){
var height = document.getElementById("inHeight").offsetHeight;
document.getElementById("hei").value = height;
parent.postMessage(document.getElementById("hei").value, "*");
}
</script>
</head>
<body onload="onlo()">
<input type="hidden" id="hei" />
<div id="inHeight">
//////中身///////
</div>
</body>
</html>
これは、基本となる高さををoffsetHeightで取得して、inputで渡している。
親側の受け取りはonmessageで受け取る。
<input type=”hidden” id=”hei” />にvalue属性に値を渡している。
document.getElementById("hei").value = height;
その後の
parent.postMessage(document.getElementById("hei").value, "*");
で親に渡す。
親側は・・・・
<script type="text/javascript">
window.onmessage = function(e){
document.getElementById('blockrandom').height = e.data+'px';
}
</script>
<iframe
name="myframe"
id="blockrandom"
src="http://www.----ここに子のURLを入れる-----"
scrolling="no"
frameborder="0"
width="100%"
>
</iframe>
な感じで高さを渡す。
これで読み込み時に高さを判断して自動で調整してくれるはず。