複数のiframeの読み込みについて

このQ&Aのポイント
  • 制限がありながらも、iframeを使用してページを組んでいると問題が発生しました。IE11とchrome34.0で表示がおかしくなり、原因がわかりません。
  • このページは親ページと子ページが別ドメインで、親ページには制限があります。ページ内リンクを使用しているが、正しくリンクが飛ばず、画像もぼやけて表示されます。
  • 親ページ内に複数のiframeを使用し、子ページの内容を表示しています。ページ内リンクを使用しているが、正しくリンクが飛ばず、一番上にスクロールしない問題が発生しています。
回答を見る
  • ベストアンサー

複数のiframeの読み込みについて

とある事情があり、制限がかなりある中、何とかiframeでやりくりをしていたのですが、 下記の通り(コード、画像参照)ページを組んだところ、 IE11、chrome34.0で確認をしたところ、下記の通り表示がおかしくなってしまいました。 制限が色々あるため、少しイレギュラーなコードの組み方をしており、どこが原因なのかがわからない状態です。 状況などをまとめましたので、お手数おかけいたしますがご教授いただけますでしょうか。 ■■■ページの概要について 恐らく下記のコードと添付の画像を見ていただいた方がわかりやすいと思いますが、制限や概要を記述しておきます。 ・表示させる方のページをA.html(親ページ)、iframe内で読み込むページをB.html(子フレーム)とします。 ・親ページの方にはかなり使用できるタグなどに制限があり、javascriptが使用できません。文字数にも制限があります(子フレームの方は自由です。) ・親ページも子フレームも触れるものの、この2ページは別ドメインです。(下記の例は相対パスで記述しています) ・子フレームの内容は、下記の例では内容が少ないですが、実際にはかなり長いページになります。ただ、ページは分けない方向でお願いします。 ・iframeはスクロールが出ないように高さを調節しています。 ・ページ内リンクを使用したいのですが、iframe内だけではなく、親ページから見た状態でページの途中に飛ばしたいため、  親ページの方にページ内リンク用のアンカーをつけ、複数のiframeで子フレームの内容を表示させています。 ・子フレームのコンテンツ毎にiframe表示用のアンカーをつけ、親ページで細かくiframeを分けて表示させています。 ・(ページ内リンクは親ページの方に記述することも出来ます。) ちなみに過去に次のような記事を見つけましたが、どちらも試すこともできない状態です。 http://okwave.jp/qa/q1105662.html http://okwave.jp/qa/q2938546.html ■■■表示のエラーについて(サーバ上でも、ローカルでも同じような状態です。) ・ページを読み込むと、一番上ではなく、一番下のiframeのところで止まります。  (⇒ページが読み込むと同時に一番上に行ってほしいです。) ・ページ内リンクを付けていますが、リンクを押しても該当のヶ所に飛ばず、  読み込むように少しページがぶれるのですが、元の位置のままです。 ・IE11のみですが、リンクで使用している画像がぼやけて表示されます。  (外部CSSで文字の背景に設定しています。) ■■■コードについて ◆A.html(親ページ) ※JSは使用不可です。 ※<body>は触れません。 ※B.htmlのページとは別ドメインです。 <!--ページ内リンク--> <iframe src="B.html#Blink" frameborder="0" width="850" height="200" marginwidth="0" marginheight="0" scrolling="no"></iframe> <!--ここから#Baの内容--> <a name="linkAa" id="linkAa"></a> <iframe src="B.html#Ba" frameborder="0" width="850" height="580" marginwidth="0" marginheight="0" scrolling="no"></iframe> <!--ページ内リンク--> <iframe src="B.html#Blink" frameborder="0" width="850" height="200" marginwidth="0" marginheight="0" scrolling="no"></iframe> <!--ここから#Bbの内容--> <a name="linkAb" id="linkAb"></a> <iframe src="B.html#Bb" frameborder="0" width="850" height="595" marginwidth="0" marginheight="0" scrolling="no"></iframe> <!--ページ内リンク--> <iframe src="B.html#Blink" frameborder="0" width="850" height="200" marginwidth="0" marginheight="0" scrolling="no"></iframe> <!--ここから#Bcの内容--> <a name="linkAc" id="linkAc"></a> <iframe src="B.html#Bc" frameborder="0" width="850" height="565" marginwidth="0" marginheight="0" scrolling="no"></iframe> ◆B.html(子フレーム) ※JSは使用可です。 <div class="pageLink"> <a name="Blink" id="Blink"></a> <ul> <li><a href="A.html#linkAa" target="_top">#linkAaへリンク</a></li> <li><a href="A.html#linkAb" target="_top">#linkAbへリンク</a></li> <li><a href="A.html#linkAc" target="_top">#linkAcへリンク</a></li> </ul> </div> <a name="Ba" id="Ba"></a> <div>Baの内容</div> <a name="Bb" id="Bb"></a> <div>Bbの内容</div> <a name="Bc" id="Bc"></a> <div>Bcの内容</div> 以上です。 よろしくお願いいたします。

  • HTML
  • 回答数4
  • ありがとう数2

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

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.4

IEのバグへの対策 ・A.html内のナビゲーションリンクはiframeを使わない ・A.html内の最後のiframeはposition:absoluteでトップに移動させる。 の二点でなんとかなりますね。

shiori-3-wgkn
質問者

お礼

昨夜ご回答いただいた「ナビゲーションをfixed」と本日いただいた件について、 色々と検証していただき、ありがとうございました。 「ナビゲーションをfixed」だと想定していた挙動と異なってしまいました。(これは、こちらのテンプレートの問題です) 本日ご回答いただいた件も試した結果、 無事ページを読み込んだ後に一番上に移動はしたものの、ナビゲーションは動作しませんでした。 IEのバグということでどうしようもなく今回は断念ですが、 ページ内リンクを付けなければIEでも想定している挙動にすることができるのがわかったので、 今後活用していく場面が多々出てくると思います。 楽天め・・・IEめ・・・というところですが、ORUKA1951様の助言で大変助かりました。 丁寧なご回答誠にありがとうございました!

その他の回答 (3)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

>親ページの方の補足で、文字コードはEUCに限定されており、「DOCTYPE宣言」は出来ない状態です。 このあたりは何か影響しますでしょうか? IEのバグでしょうね。  いっそのこと、B.htmlをひとつだけ呼び出して、スタイルシートでナビゲーションをfixedにしてしまう。それが一番スマートかと

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

そうはならないはず・・HTMLがちゃんと書けていたら [A.html] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> _<meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> _<title>サンプル</title> _<meta http-equiv="Content-Style-Type" content="text/css"> _<style type="text/css"> <!-- html,body{margin:0;padding:0;} h1,h2,h3,h4,h5,h6{margin:0;line-height:1.6em;} p{text-indent:1em;} div.header,div.section,div.footer{width:90%;min-width:630px;max-width:900px;margin:0 auto;padding:5px;} div.header iframe{height:60px;oveflow:hidden;} div.section{min-height:400px;position:relative;} div.header h1{display:none;} iframe{ border:none; width:100%; height:400px; } --> _</style> </head> <body> _<div class="header"> __<h1>タイトル</h1 __<p><iframe src="B.html#INDEX"></iframe></p> _</div> _<div class="section" id="FIRST"> __<p><iframe src="B.html#FIRST"></iframe></p> _</div> _<div class="section" id="PREPARED"> __<p><iframe src="B.html#PREPARED"></iframe></p> _</div> _<div class="section" id="FIRST_STEP"> __<p><iframe src="B.html#FIRST_STEP"></iframe></p> _</div> _<div class="section" id="SAMPLE"> __<p><iframe src="B.html#SAMPLE"></iframe></p> _</div> _<div class="footer"> __<h2>文書情報</h2> __<dl class="documentHistry"> ___<dt id="FIRST-PUBLISHED">First Published</dt> ___<dd>2013-03-03</dd> __</dl> _</div> </body> </html> [B.html] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> _<meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> _<meta http-equiv="Content-Style-Type" content="text/css"> _<title>初めてのウェブページ</title> <style type="text/css" media="screen"> <!-- div.header{padding-top:40px;} div.section{width:100%;min-height:400px;position:relative;} div.nav{position:absolute;top:0;text-align:center;width:100%;} div.nav ol{list-style:none;margin:0;padding:0;line-height:40px;} div.nav ol li{width:20%;position:relative;display:inline-block;} div.nav ol li a{display:block;width:100%;height:100%;text-decoration:none;} div.nav ol li a[href="A.html#FIRST"]{background-color:yellow;} div.nav ol li a[href="A.html#PREPARED"]{background-color:aqua;} div.nav ol li a[href="A.html#FIRST_STEP"]{background-color:lime;} div.nav ol li a[href="A.html#SAMPLE"]{background-color:silver;} div#FIRST{background-color:yellow;} div#PREPARED{background-color:aqua;} div#FIRST_STEP{background-color:lime;} div#SAMPLE{background-color:silver;} --> </style> </head> <body> _<div class="header" id="TOP"> __<h1>初めてのウェブページ</h1> _</div> _<div class="section" id="FIRST"><!-- 本文 --> __<h2>はじめに</h2> __<p> ___最初に必要な用語をごく簡単に説明しておきます。それ以外の用語は登場するたびに説明するなり、外部情報へのリンクが指定してあります。 __</p> _</div> _<div class="section" id="PREPARED"><!-- 本文 --> __<h2>用意するもの</h2> _</div> _<div class="section" id="FIRST_STEP"> __<h2>とりあえず作ってみよう</h2> _</div> _<div class="section" id="SAMPLE"> __<h2>とりあえず作ってみよう</h2> _</div> _<div class="nav" id="INDEX"> __<ol> ___<li><a href="A.html#FIRST" target="_parent">最初に</a></li> ___<li><a href="A.html#PREPARED" target="_parent">用意するも</a></li> ___<li><a href="A.html#FIRST_STEP" target="_parent">WebとHTML</a></li> ___<li><a href="A.html#SAMPLE" target="_parent">見本</a> __</ol> _</div> _<div class="footer"> __<h2>文書情報</h2> __<p>・・・・</p> _</div> </body> </html>

shiori-3-wgkn
質問者

補足

ご丁寧なご回答をありがとうございます。 頂いたコードのままページを作成し確認をしたところ、 chromeは正常な状態で動作をしたのですが、IEは変わらず一番下のままでした。 (アンカーリンクも飛びませんでした。) 確認をしているOSは windows 7 ですが、ブラウザやOSの問題でしょうか? また、いただいたコードをそのまま使用したので今回は関係ないと思いますが、 親ページの方の補足で、文字コードはEUCに限定されており、「DOCTYPE宣言」は出来ない状態です。 このあたりは何か影響しますでしょうか? お手数おかけいたしますが、もし分かれば是非よろしくお願いいたします。

  • shockatz
  • ベストアンサー率80% (153/191)
回答No.1

一般的に、仰っている内容はA.html側のドメインでjavascriptを動作させればすぐ解決する問題ばかりです。 B.html側にjsを書いても、コンテナとしてのA.htmlに対しては、「ドメイン間セキュリティ」の制限があり、A.html側のコンテンツは操作できません。 で、はなはだ疑問なのですが、以下の記述 ◆A.html(親ページ) ※JSは使用不可です。 ※<body>は触れません。 A.htmlで「JS使用不可」というのが理解できません。 通常、JSが動作するか否かは単純にブラウザ側の問題なので、企業内システムでの運用制限などで、明示的にjavascriptを動作しないようにしている、という意味でしょうか? (その割にはiframe内部のB.htmlでjavascriptが動くような記述があるのですが) 自分思いますに、おそらくECサイト構築サービスやCMS等の利用で、<head></head>内部へのjavascript記述や、<body>タグへのonLoadイベントハンドラ記述ができないので、javascriptの利用を諦めておられるのではないかと思います。 javascriptは<head>内だけでなく、<body>内にも普通書けるので、jQueryなども普通に利用できますよ。 記入位置は</body>直前でいいと思います。

shiori-3-wgkn
質問者

お礼

ご回答いただきありがとうございます。 「A.html側のドメインでjavascriptを動作させればすぐ解決する」というのは私も常々思っております。 javascriptを<body>内に記述しても動作するというのは存じていたのですが、やはり「制限」があり<body>内に記述もできないという状況です。 必要無いと思い記述をしておりませんでしたが、使用しているシステムは楽天ショップの「楽天RMS」です。 親フレームの方は楽天RMS内に記述、子フレームの方は「楽天GOLD」というサービスを使いFTPでサーバに直接アップをするという方法です。 他店の方もかなり苦労をされているようで、楽天RMS内は完全にJS不可のため、コンテンツを楽天GOLDの方で制作し、楽天RMSでiframeで呼び出すという手法をとっています。 すべてのページを楽天GOLDで制作すれば良いのではと思われるかもしれませんが、 アクセス解析や容量など諸々の問題があり実現は難しいです。 今後楽天の対応が改善されることを願うのですが・・・ ご回答ありがとうございました。

関連するQ&A

  • iframeにリンクを貼る

    <iframe src="qqq.gif" height="150" width="356" align="left" frameborder="0" scrolling="no" marginheight="1" name="tv" > この部分はiframe表示です </iframe> にURLを指定してリンクを張りたいのですが、どうしたらいいですか?

  • リンク元の引数を取得してjavascriptを実行したい

    リンク元に引数を入力して、リンク先でページのインラインフレームのページが指し換わるjavascriptを実行させたいです。 実行させたいjavascriptは function change(URL1,URL2) { document.getElementById('contents1').innerHTML = '<iframe src="'+URL1+'" width="620" height="343" frameborder="0" scrolling="no" name="myFrame1" marginwidth="0" marginheight="0" hspace="0" vspace="0"></iframe>' ; document.getElementById('contents2').innerHTML = '<iframe src="'+URL2+'" width="620" height="215" frameborder="0" scrolling="no" name="myFrame2" marginwidth="0" marginheight="0" hspace="0" vspace="0"></iframe>' ; } 引数からURL1とURL2に代入したいです。 アドバイスよろしくおねがいいたします。

  • iframe内リンクをiframe外に表示する方法

    楽天のショップでiframeを使ってページ作成をしようと思っているのですが、 iframe内にリンクを貼るとiframeの中だけでリンク先に飛ばれて、iframeの外側には反映されません。 iframeの中の<iframe src="http://www.rakuten.ne.jp/gold/●●.html" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" width="980" height="280"> この中のhtmlには<base target="_top">としているのですが、それでも全体のページには反映されず ifame内だけで展開してしまいます。 通常であればこれで問題ないと思うのですが、楽天の中だと規制がかかり失敗してしまいます。 素人でお見苦しい点もあると思うのですが、よろしくお願いします。 ちなみに参考にしているページはこちらになります。 http://www.rakuten.co.jp/cocoa/ よろしくお願いします。

    • ベストアンサー
    • HTML
  • 目次つねに表示をするには・・・!?

    本を読んで <div id="menu" class="gureisyouClass"> <nolayer><IFRAME name="sample" border="0" frameborder="0" marginheight="0" marginwidth="0" src="iframe.html" width="210" height="720" scrolling="no"></IFRAME> </nolayer><ilayer src="iframe.htm" width="210" height="720" scrolling="no"></ilayer></div> 「iframe.html」という目次ページを作ってどのページをクリックしても目次をつねに表示するようにしました。けれど、目次が増えていくとheight="720"を増やす作業を全ページやり直していかなければなりません。いろんな方のHPソースをみるとdivの中にテーブルで目次項目を全ページ記述してあります。目次が増える都度みなさん全ページやり変えてらっしゃるのですか?どうすればいいのでしょうか、とても困っています。

    • ベストアンサー
    • HTML
  • IFRAMEの設定

    インラインフレームを現在使ってAというホームページの一部から、Bというホームページの一部を覗くようにしています。(以下) <NOLAYER><IFRAME name"sample" boeder="0" frameborder="0" marginheight="0" marginwidth="0" src="http://homepage2.nifty.com/sakuya_me/111.htm" width="430" height="134" scrolling="no"></IFRAME></NOLAYER> <ILAYER SRC="http://homepage2.nifty.com/sakuya_me/111.htm" width="419" height="134" scrolling="no"></ILAYER> この文だと、111.htmの画面左上角から見えるようになりますが、 それを、適当な見たい位置にずらしす事は可能でしょうか?(虫メガネのように) よろしくお願いします。

  • 複数の<iframe>内にHTMLをランダム表示

    以下のようなソースで、ランダムにHTMLをIFRAMEに読み込むソースを書いています。 (Javascript) window.onload = function(){ var c = 23; //ランダムに表示するiframe内URLの数 var ifm = document.getElementById('aaa');//frameIDを入力 var r = Math.floor( Math.random() * c ); var urls = new Array(); urls[0] = '../text/1.html'; urls[1] = '../text/2.html'; urls[2] = '../text/3.html'; urls[3] = '../text/4.html'; urls[4] = '../text/5.html'; urls[5] = '../text/6.html'; urls[6] = '../text/7.html'; urls[7] = '../text/8.html'; urls[8] = '../text/9.html'; urls[9] = '../text/10.html'; ifm.src = urls[r]; } (HTML) <iframe src="#" id="aaa" frameborder="0" marginwidth="0" width="115" marginheight="0" scrolling="no"></iframe> このような要領で、 id="aaa"にはtextフォルダ内のファイル1.html~10.htmlのうちからランダムで、 id="bbb"にはtextフォルダ内のファイル11.html~20.htmlのうちからランダムで、 id="ccc"にはtextフォルダ内のファイル21.html~30.htmlのうちからランダムで、 ・・・・ といった感じで以下のようなソースでそれぞれ読み込めればと思っているのですが、どうやったら可能でしょうか? <iframe src="#" id="aaa" frameborder="0" marginwidth="0" width="115" marginheight="0" scrolling="no"></iframe> <iframe src="#" id="bbb" frameborder="0" marginwidth="0" width="115" marginheight="0" scrolling="no"></iframe> <iframe src="#" id="ccc" frameborder="0" marginwidth="0" width="115" marginheight="0" scrolling="no"></iframe> javascriptにかんしてはあまり詳しくありませんので、ちょっと改変してコピペするくらいまでのソースを教えていただけませんでしょうか? よろしくおねがいします。

  • スクロールできない

    お世話になっています。 下のようなファイルによって、フレームを使ったファイルindex2.htmlを呼び出して、HP全体を真ん中寄せにしました。 するとマウスの真ん中のちょぼでスクロールできなくなってしまいました。 <body> <DIV ALIGN="center"> <iframe name="cal-iframe" src="index2.html" width="920" height="2500" scrolling="yes" frameborder="0" marginwidth="0" marginheight="0"> </iframe> </DIV> </body> スクロールバーをドラッグアンドドロップで操作することはできるのですがちょぼで操作できるようにするには、どうすればいいでしょうか?

    • ベストアンサー
    • HTML
  • <iframe>で読み込むページの高さを自動取得して、heigthに代入

    一つ大きなフレームを <iframe name="disp" src = "" height=1000 width=1000 frameborder=0 scrolling=auto></iframe> とおいて、同一ページ内から<a href="test.html" target=disp> として、test.htmlが空白ページの<iframe>内に表示させるようにしたいのですがその都度、読み込むページの高さを自動取得して、heightとして自動的に適切な高さに変換するということはできいないでしょうか?

    • ベストアンサー
    • HTML
  • Iframeとして呼び出すページを120px以下を表示したい

    Iframeを使いたいのですが、A.htmlの高さ120pixから下をIframeで指定したいときはどうしたらいいでしょうか。 <html> <head> <title>testtitle> </head> <body> <div width:100%; height:120px;> <table> <tr> <td><iframe src="A.htm" width="100%" height="100%" frameborder="0" scrolling="no" overflow:no></iframe><td> </tr> </table> </div> </body> </html> 呼び出すIframeの中身のページについて 高さを120pix以下を表示したいのですが。 よろしくおねがします。

  • iframeについて教えてください。

    ページ数が多く、一部変更するのにかなりの時間を要するので、ページ内のとある部分をフレーム対応に変更しました。 いろんなweb講座のページを見てそれらしきものを書き、一応見た目上は機能しているのですが、ちゃんとした意味がわからないので、詳しく知ってる方がいたら教えてください。 ■私が書いたもの <ILAYER CLIP="0,0,160,600" HEIGHT="600" WIDTH="160"> <LAYER HEIGHT="600" WIDTH="160" SRC="../etc/ad-love.htm"> <iframe src="../etc/info.html" name="sample" width="160" height="600" frameborder="0" scrolling=no> この部分はインラインフレームを使用しています。 </iframe> </LAYER> </LAYER> ◆縦600、横160というのを3回も書いてますが、こんなに必要なんでしょうか?本当は省略できるのに意味のない記述をしてるんでしょうか。 ◆この3回出てくる600,と300はすべて同じ部分をあらわしていますか? 例えば一番最初のはフレーム全体、次のはフレームの中の部分をあらわす、などのように微妙な違いがあるんでしょうか? わかりづらくてすみません。よろしくお願いします。

専門家に質問してみよう