アプリ版:「スタンプのみでお礼する」機能のリリースについて

iframe代わりにobjectタブを使用しています。
読み込むページにあわせてjavascriptで高さを変更したいのですが
FireFoxと違ってOperaではどうもうまくいきません。
どのようにすればよいのでしょうか。どなたか回答お願いします。

ちなみに現在のソース(必要部分のみ)は以下のような感じです。
<object onload="load()" id="content" type="text/html" data="~"></object>
<script>
function load(){
document.getElementById("content").height=document.getElementById("content").contentDocument.body.offsetHeight+"px";
}
</script>

A 回答 (3件)

小さくする方だったんですね。

再現できました^^;

参考ソースでは大きくする方もできなかったので load()の名前変更で大きくできるので解決すると思い込んでしまってました。

で、ちょっといくつか試しましたが、
OperaはObjectタグのheightがそのままコンテンツのbodyのoffsetHeightになってしまうようです。(つけない場合は150pxがデフォ?)
Objectタグに height='0'をつければ 0って戻りますし。
SafariもOperaに似た動きしましたが 0pxに設定すると逆にほぼ正しいHeightを返してくれるようになりました。
でもOperaは駄目ですね。

なので、小手先の方法ですが
読み込ませる test2.htm のBODYの内側に<div id="body"></div>を囲んでしまい、
このDIVのoffsetHeightを求めれば、ほどほど正しい値が戻るようです。
読みこませるHTMLファイルが自分の物でこれがかのうなら、なんとか、、

<object onload="loads(this)" id="content" type="text/html" data="./test2.htm" ></object>
<script>
function loads(obj){
var Height = obj.contentDocument.getElementById('body').offsetHeight
alert(Height)
obj.height = Height + "px";
}
</script>

ただ、これだとOpera、Safariだとスクロールバーも出るので、
style指定にして縦も5pxくらい足すとOperaではスクロールバーも出なくなるみたいですね。

----------test1.htm----------
<html>
<body>
<object onload="loads(this)" id="content" type="text/html" data="./test2.htm" ></object>
<script>
function loads(obj){
var Height = obj.contentDocument.getElementById('body').offsetHeight

alert(Height) //確認

obj.style.height = Height + 5 + "px";
}
</script>
</body>
</html>

----------test2.htm----------
<html>
<body>
<div id="body">
test<br>
</div>
</body>
</html>
    • good
    • 0
この回答へのお礼

正しく高さを認識することができました!
僕の最初の質問文がわかりにくかったため、お手数をおかけしてしまいましたが
おかげで満足のいくページが構築できそうです。ありがとうございました!

お礼日時:2008/03/01 00:04

<object onload="loads()" id="content" type="text/html" data=""></object>


<script>
function loads(){
document.getElementById("content").height=document.getElementById("content").contentDocument.body.offsetHeight+"px";
}
</script>

私の環境では、ソース部分の load() 2箇所を loads()にするだけでOperaもFireFoxと同じようにきちんと表示されるので、上手くいかない再現ができないのでちょっとわからないです。

この回答への補足

回答をコピペさせていただきましたが、やはり上手くいきません。
objectタグに読ませる内容をどのようにしてもoffsetHeightの値が「150」となります。
できる限り簡単にした以下の2つのファイルを同じフォルダに置きtest1.htmにアクセスすると
Firefoxでは「19」、Operaでは「150」とダイアログ表示されます。
ちなみにサーバーはApache2.2.4でOperaのバージョンは9.26です。

----------test1.htm----------
<html>
<body>
<object onload="loads()" id="content" type="text/html" data="./test2.htm"></object>
<script>
function loads(){
alert(document.getElementById("content").contentDocument.body.offsetHeight);
}
</script>
</body>
</html>

----------test2.htm----------
<html>
<body>
test<br>
</body>
</html>

補足日時:2008/02/29 21:37
    • good
    • 0

Ojbectタグをわざわざ使う理由は何かあるのでしょうから、とりあえずそのままとして。




オンロードで渡す関数名を
load() ではなく loads() に変えてみてください。

この回答への補足

変えてみましたが、結果は同じでした。
高さを変える他の方法はないでしょうか。

補足日時:2008/02/29 19:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!