みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

IFRAMEで高さを自動調整したい

IFRAMEを使っているのですが、PCを起動して最初にページを開いたときだけ、正しい高さに設定できなくて困っています。
「更新」をクリックするとそれ以降はうまく動くのですが...
IE(6)の症状で、FireFoxではPC起動直後でも問題なく動きます。

<iframe src="http://aaaaa.php?mode=abc"
onload="LoadFrame(this.id)" id="Ifr-a" width="700"
marginwidth="0" marginheight="0"
scrolling="no" frameborder="0"></iframe>

javaScript側は、
function LoadFrame(frid) {
var IFR = document.getElementById(frid);
IFR.height = (IFR.contentWindow)?
IFR.contentWindow.document.body.scrollHeight:
document.frames[frid].document.body.scrollHeight;
}
PCを起動した直後の1回目だけうまく表示されません。
IFR.height<1のようなので、処理結果は0になってるようです。

よろしくお願いいたします。

投稿日時 - 2007-02-20 10:57:47

QNo.2768376

すぐに回答ほしいです

質問者が選んだベストアンサー

"contentWindow"については、あまり詳しくないのですが、
興味がありましたので、上記のスクリプトをIE6とFirefoxで動かしてみました。
iframeのソースが外部サーバのページの場合、
JavaScriptのエラーが発生しました。
contentWindowの行で「エラー:アクセスが拒否されました」が出ます。
初回だけではなく、毎回です。

iframeのソースを同一サーバのページに変えたところ、
初回起動時も含め、正常に動作しました。
なお、IEとFirefoxに挙動の違いは、ありませんでした。

正常に動作しない時には、JavaScriptのエラーが出ていると思うので
まずは、そちらを確認されてはいかがでしょうか?
ステータスバーの左端のアイコンをダブルクリックです。

もし、エラーではなく、「0」になっているのであれば、
if文を入れて、LoadFrame()を再起呼び出しするか、iframeをリロードすると、上手くいくかもしれません。
ただし、その場合は、リロードフラグを設けるなりして、
無限ループにならないようにくれぐれもご注意ください。

投稿日時 - 2007-02-20 21:58:31

お礼

ご回答ありがとうございます。
IFR.heightは「0」になっていて、JavaScriptのエラーは出ていませんでした。
IEで最初にページを表示するときだけ、妙に時間がかかっているのですが...
おそらく...onloadイベントの発生する条件が、Firefox、ネットスケープとIEとで違うみたいです。
iframeに表示するコンテンツが早く表示できるときは、気付かないような違いなのかもしれません。
LoadFrame()を再起呼び出しにして対応しているのですが、
IFR.contentWindow.document.readyState は、いつも "complete"
なので、終了する条件はどうしたものかとハマッテしまいました(w
もう少し、がんばってみます。
ありがとうございました。

投稿日時 - 2007-02-21 09:51:33

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問