- - PR -
iframeの表示
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-26 22:02
こんにちは。
Struts2を使ったWEBアプリを作成しているのですが、IE6の挙動がうまくいきません。 ボタンを押下したら、iframeのデータがPOSTし、JavaのAction内処理が行われ、メッセージをセットします。 そのメッセージは <div style="color: #FFFFF">完了しました</div> のように受けわたりiframeに処理結果として表示されるイメージです。 ただ、FireFox3 & safari & Chorome0.3では出力されるのですが、IE6では処理は正常に完了しているのですが、完了メッセージが表示されません。 ここで紹介されている内容を見るとIE6のiframe自体の構造がhtmlから外れているようなのですが、それが影響しているのでしょうか? http://allabout.co.jp/internet/javascript/closeup/CU20060115A/index.htm IE6 & IE7でも出力されるようにしたいのですが・・。お分かりになりましたらよろしくお願いします。 | ||||
|
投稿日時: 2008-11-26 22:41
iframeに表示されるものは極端な話、全く別ドキュメントです。
iframeだから表示されないのか、 targetを_blank等にしても表示されないのか、どちらでしょう? 表示されなかった領域はどうなってますか? 右クリックして、プロパティやHTMLのソースを見るのも参考になるかと思います。 文字コードの解釈の問題で、出力されているけど、 表示はされていないということもあります。 | ||||
|
投稿日時: 2008-11-26 23:08
ありがとうございます。
おっしゃるように、右クリックででソースの表示と見ると確かにセットされてますね・・。 表示はされず認識していない感じです・・。ためしに<html><body>タグをメッセージに囲ってみましたが、同じでした・・。metaタグで文字コードを指定しても表示はされません・・。 <iframe name="frame1" id="frame1" style="height: 50px; margin: 0 0; filter: alpha(opacity=0); " frameborder="no" scrolling="no"></iframe> 何か邪魔しているのでしょうか? | ||||
|
投稿日時: 2008-11-26 23:50
filter: alpha(opacity=0);
これ。 背景を透過させるのは、allowtransparency = true だよ。 | ||||
|
投稿日時: 2008-11-27 00:42
ありがとうございます。
おっしゃるとおりでした!表示されました。 私も初めこれにして透過を試してみたのですが、IE6では反映されませんでした。 そこで、調べた所alphaのCSSに辿り着きました。 実際は透過の必要がなく、background-color: #FFFFFF;がiframeのstyleで効かない為、透過の手法を取りました。 ん〜・・。ブラウザを判定してソースを変えるのも、あまり好きではないのですが、仕方ないですかね。。ありがとうございます。 | ||||
|
投稿日時: 2008-11-27 00:45
filter:alpha(opacity=0)
これは半透明フィルタで、不透明=0としているためです。 ではなぜ他のブラウザなら表示されたかというと、 単にIE専用のスタイルだからです。 firefoxなら-moz-opacityなど、ブラウザによってばらばらな実装です。 どういう意図で書いたかは存じませんが、 単にIE以外のブラウザでは無視されているだけですね。 | ||||
|
投稿日時: 2008-11-27 00:48
背景を白にしたいなら、iframeではなく、 iframeの中のHTMLに設定しましょう。 iframeは枠を作るのが目的で、iframeの中の見た目は、 中のドキュメントの担当です。 | ||||
|
投稿日時: 2008-11-28 01:39
ありがとうございます。
これもIE6だけなのですが、iframeの戻り値に対して背景色等をセットすると初期表示時空白状態です。中身を見ると<html></html>なので、セットしなければいけないのですが。 innerHTMLでセットする時は、 if (document.all) { iframedoc = iframe.contentWindow.document; } else { iframedoc = iframe.contentDocument; } iframedoc.writeln("<body></body>"); iframedoc.body.innerHTML = "Inline Frame"; のようにセットしなければいけないようです。 あまり煩雑なソースにしたくないのですが、簡易な方法はありませんでしょうか? <iframe ..><html><body bgcolor="#000000"></body></html></iframe>はだめでした・・。 |