• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:iframeクッキー指定(?))

iframeクッキー指定によるページ表示の制御方法

このQ&Aのポイント
  • iframe内でのページ表示を制御するために、クッキーを使用する方法について解説します。
  • index.html内のリンクから、特定のページを表示したままにするためには、クッキーの値を設定する必要があります。
  • javascriptを使用して、クッキーの値を変更することで、ページの表示を制御することができます。

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

  • ベストアンサー
  • arexis
  • ベストアンサー率66% (66/99)
回答No.1

前回書いた物です。 とりあえず前回のものを使ってるなら <script type="text/javascript"> var cook_key = "iframesrc"; /* クッキーのキーになる適当な名前 */ window.onload = function(){ if(cook_src) document.getElementById('fffffid').src = ''; var cook_src; var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ if(cookies[i].indexOf(cook_key) >-1){ cook_src = cookies[i].split('='); break; } } document.getElementById('fffffid').src = cook_src ? (cook_src[1] ? cook_src[1] : 'a.html') : 'a.html'; } function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } document.write(document.cookie) </script> <a href="./a.html" target="fffff" onclick="setCook(this.href)">test</a> <a href="./b.html" target="fffff" onclick="setCook(this.href)">test</a> <a href="./c.html" target="fffff" onclick="setCook('')">test</a> <iframe id="fffffid" name="fffff" src="./a.html"></iframe> c.htmlのような場所には setCook('')の様に書けばOKです。 前回のスクリプトのままで使うなら c.htmlのような場所は setCook('http://ここはフルUR・・a.html') の様に書けばそれでもいけます。

yamamcks
質問者

お礼

お礼の部分にかかせていただきます。 すみません。スクリプトの指定を間違えていただけで、 そこを直すと動作しました!! しかし、inde.htmlと、iframe内に count=数字; iframesrc; count=数字; 0505349NQ=3dxanhujdxbveivabbj&00abbj; 0505349NT=あどれす; NinjaSTpV=1200815257375 count=数字; iframesrc; count=数字; 0505349NQ=3dxanhujdxbveivabbj&00abbj; 0505349NT=あどれす; NinjaSTpV=1200815257375 といった文字が表示されます。 表示しないようにするにはどうすればいいでしょか? 教えてください。 また、補足で述べた iframeの高さ可変の動作についても、 解決していないので、教えてください。

yamamcks
質問者

補足

testページを作ってやってみました。 (c.htmlは複数存在するので、d.htmlをc.htmlと同じ設定で追加しました。) まず、前回のスクリプトのままで使ってみました。 前回のスクリプト var cook_key = "iframesrc"; /* クッキーのキーになる適当な名前 */ window.onload = function(){ if(cook_src) document.getElementById('fffffid').src = ''; var cook_src; var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ if(cookies[i].indexOf(cook_key) >-1){ cook_src = cookies[i].split('='); break; } } document.getElementById('fffffid').src = cook_src? cook_src[1] : 'a.html'; } function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } を、standard.jsにいれ、 index.html~d.html(すべてのファイル)に  <script type="text/javascript" src="/standard.js"></script>  <script language="JavaScript" src="/standard.js"></script> で指定しました。 index.htmlのリンクは  <a href="./a.html" target="fffff" onclick="setCook(this.href)">a</a>  <a href="./b.html" target="fffff" onclick="setCook(this.href)">b</a>  <a href="./c.html" target="fffff" setCook('http://ふるぱすa.html')>c</a>  <a href="./d.html" target="fffff" setCook('http://ふるぱすa.html')>d</a> とし、 iframeは <script type="text/javascript"> var cook_key = "iframesrc"; /* クッキーのキーになる適当な名前 */ var cook_src; var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ if(cookies[i].indexOf(cook_key) >-1){ cook_src = cookies[i].split('='); break; } } var file = cook_src? cook_src[1] : 'a.html'; document.write('<iframe id="fffffid" name="fffff" src="',file,'"></iframe>') function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } </script> <noscript> <iframe id="fffffid" name="fffff" src="./a.html"></iframe> </noscript> としておきました。 結果 a.htmlが最初に表示される ○ b.htmlをクリックし、更新をおすと、b.htmlが表示される ○ c.htmlをクリックし、更新をおすと、a.htmlが表示される ×  (b.htmlが表示されました。) d.htmlをクリックし、更新をおすと、a.htmlが表示される ×  (b.htmlが表示されました。) a.htmlをクリックするとa.htmlが表示される ×  (一瞬a.htmlが表示され、すぐに白紙ページに飛びます) a.htmlをクリックし、更新をおすと、a.htmlが表示される ×  (一瞬a.htmlが表示され、すぐに白紙ページに飛びます) リンクの  <a href="./a.html" target="fffff" onclick="setCook(this.href)">a</a> を  <a href="./a.html" target="fffff" setCook('http://ふるぱすa.html')">a</a> としてもだめでした。 そこで、ANo.1で教えてくださったスクリプトで試してみました。 standard.js 内を、ANo.1の  var cook_key = "iframesrc"; /* クッキーのキーになる適当な名前 */  ~  document.write(document.cookie) に変え、 index.htmlのリンクのc.htmlとd.htmlのところを、 onclick="setCook('')" にかえてみました。 結果(先ほど書いたものと違う部分だけ書きます。) c.htmlをクリックし、更新をおすと、a.htmlが表示される ×  (404のページが表示されました) d.htmlをクリックし、更新をおすと、a.htmlが表示される ×  (404のページが表示されました) スクリプトに  ; /* クッキーのキーになる適当な名前 */ とありますが、ここの値は変更していませんがよろしいですか? 自分なりに、スクリプト内が怪しいといじってみましたが、 状況はかわりませんでした。(いじった部分はあとで直しました) 解決法教えてください。 P.S. 私は、iframeに高さ可変のスクリプトを使用しています。 上記のクッキー設定をしても、動作しますが、動作が遅いです。(5秒くらいかかる) 高さ可変のスクリプトの動作を早める方法も良ければ、教えてください。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • arexis
  • ベストアンサー率66% (66/99)
回答No.2

えっと、まず訂正から #1に書いたスクリプトの部分ですが document.write(document.cookie) この部分は、私がテストする時に確認用に付けた物で不要の物です(^^; この行は削除してください。(クッキーの中身を表示させる物) /* クッキーのキーになる適当な名前 */ に関しては、半角英数文字で自由に変更可能です。 ************************* あと、 前に質問者さんの質問でも見かけたと思うのですが <script type="text/javascript" src="/standard.js"></script> <script language="JavaScript" src="/standard.js"></script> この2重指定って、何らかの特殊なケースを想定してのことですか? 普通に2度実行されてしまう物が出てきてしまうかと・・ ************************ iframeの高さの変更ですが、前の方にある質問ですね。 ちょっと中身をきちんと見ていませんが^^; 時間がかかるのは例えばローカルでテスト用に組んで行っても同じですか? ローカルでは瞬時で変更されて、サーバー上では5秒かかるとすれば、 コンテンツ量やサーバーレスポンスとの兼ね合いもあると思います。 基本的にJavaScriptでドキュメント内のエレメントを操作する場合は、 ドキュメントが全て読み込まれてからとか、対象エレメントが読み込まれてからと言うタイミングになります。 複雑な構造や大量のコンテンツの場合は、実行タイミングなどもどんどん遅くなっていく場合も多いです。

yamamcks
質問者

お礼

document.write(document.cookie) これを削除したら無事消えました。 ************************* <script type="text/javascript" src="/standard.js"></script> <script language="JavaScript" src="/standard.js"></script> はい、何らかの特殊なケースを想定したためだったのですが・・・ ご指摘もらったので、 <script language="JavaScript" src="/standard.js"></script> だけにすると、動作速度が3倍ほどにあがりました! 高さ可変の動作も上記によって、早くなりました。 c.htmlやd.htmlを開いたときに更新を押すと、 404になっていたのですが、 スクリプト内のiframeの src="',file,'" を src="a.html"になおせば出来ました。 色々助かりました。本当にありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • iframeクッキー2

    すみません。解決したと思っていたのに後で確認したところ、出来ていませんでした。 一度削除したのに、またこうやって立てて、申し訳ないです。 何度も試行錯誤しましたがまったくうまくいかなかったので質問させて頂きます。 testページではできたのですが、index.htmlの方にするとうまくいきません。 タグをおいておきます。 ************************* index.htmlの基本とiframe ************************* <html> <head> <title></title> <META>(3行、METAタグをおいています) <link rel="stylesheet" type="text/css" href="/standard.css"> <script language="JavaScript" src="/standard.js"></script> <script> function GetHeightForIndex(){ GetHeight("iframeのID"); } </script> </head> <body onLoad="Clock(),Ref()"> <table ~~~ ~~~ <td valign=top width=87% rowspan=2> <script type="text/javascript"> var cook_key = "iframesrc"; /* クッキーのキーになる適当な名前 */ var cook_src; var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ if(cookies[i].indexOf(cook_key) >-1){ cook_src = cookies[i].split('='); break; } } var file = cook_src? cook_src[1] : 'a.htmlにあたるページアド'; (/inde.html なら、 /フォルダ名/a.html のファイルの位置にあります) document.write('<iframe class=tmain src="',file,'" id="iframeのid" name="iframeの名前" frameborder="0" scrolling="no" height="1500"></iframe>') function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } </script> <noscript> <iframe class=tmain src=.htmlにあたるページアド id="iframeのid" name="iframeの名前" frameborder=0 scrolling=no height=1500></iframe> </noscript> </td></tr> </table> </body> </html> ************************* index.htmlのリンク ************************* <a href=c.htmlにあたるページ onclick="setCook(this.href)">掲示板</a> </td><td class=white width=1> <div id="line"></div> </td><td class=white><center> <a href=d.htmlにあたるページ onclick="setCook(this.href)">チャット</a> a.htmlはテーブルリンクを使用しています。 <table ~~~ <td onClick="tmain.location.href='a.htmlにあたるページ',setCook(this.href)" STYLE="cursor:hand;"> ************************* standard.js ************************* 時計や更新日、iframeの高さ可変など~~~ //iframeクッキー var cook_key = "iframesrc"; /* クッキーのキーになる適当な名前 */ window.onload = function(){ if(cook_src) document.getElementById('iframeのID').src = ''; var cook_src; var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ if(cookies[i].indexOf(cook_key) >-1){ cook_src = cookies[i].split('='); break; } } document.getElementById('iframeのID'').src = cook_src ? (cook_src[1] ? cook_src[1] : 'a.htmlにあたるページアド') : 'a.htmlにあたるページアド'; } function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } こういう状態なのですがうまく機能されません。 この状態だと、 最初に表示されるa.html  × (表示されない。404になる。) b.thmlの表示と更新しても同じように表示される(クッキー有) ○ c.htmlやd.htmlなど、表示 ○  ↑の状態でを更新をおす。 ×  (a.htmlの最初に表示するときと同じように404) a.htmlのリンクを押す。(a.htmlが表示される) ○ document.write('<iframe class=tmain src="',file,'" id="iframeのid" name="iframeの名前" frameborder="0" scrolling="no" height="1500"></iframe>') の ',file,'の部分をa.htmlにあたるページに直すと、 最初に表示されるa.html、c.htmlとd.htmlを更新した際、共にa.htmlが正常に表示されたので、出来たのかと思ったのですが、 b.htmlで更新を押すと、クッキーが無になり、a.htmlが表示されるようになる。 何度もすみませんが、うまくいかず、困ったので教えてください。 P.S.  b.htmlのようなページを複数にする場合には、 リンクの onclick="setCook(this.href)" をb.htmlのようにしたいページのリンク(aタグ)に入れればいいですよね?

  • iframeクッキー あと少しで

    またしても立ててしまいました。 自分の力ではどうしようも出来ないので、立てたことお許しください。 index.htmlのiframeに最初に表示されているページ a.html index.htmlの<a>タグリンクでiframe内に表示するページの内、  クッキーによって、更新おしてもiframe内を変えないページ b.html・c.html  クッキーを解除し、更新を押すと、a.htmlを表示するページ d.html・e.html 現在、今までの質問で以下のタグでiframeのクッキーを使用しています。 ************************************************************************** index.html ************************************************************************** <head>内  <script language="JavaScript" src="/standard.js"></script>  <script><!--  function GetHeightForIndex(){  GetHeight("tmain");  }  //--></script>  これは、iframeの高さ可変のタグです <body>内  <a href="b.html" onclick="setCook(this.href)">b</a>  <a href="c.html" onclick="setCook(this.href)">c</a>  <a href="d.html" onclick="setCook('')">d</a>   <a href="e.html" onclick="setCook('')">e</a> <script type="text/javascript"><!-- var cook_key = "iframesrc"; if(cook_src) document.getElementById('iframe名').src = 'a.html'; var cook_src; var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ if(cookies[i].indexOf(cook_key) >-1){ cook_src = cookies[i].split('='); break; } } var file = cook_src? cook_src[1] : 'a.html'; document.write('<iframe class="tmain" src="',file,'" id="iframeID" name="iframe名" frameborder="0" scrolling="no" height="1500"></iframe>') document.getElementById('tmain').src = cook_src ? (cook_src[1] ? cook_src[1] : 'a.html') : 'a.html'; function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } //--></script> <noscript> <iframe class="tmain" src="a.html" id="iframeId" name="iframe名" frameborder="0" scrolling="no" height="1500"></iframe> </noscript> ************************************************************************** standard.js ************************************************************************** //iframe高さ可変 function getIFrameDocument(aID){ if (document.getElementById(aID).contentDocument){ return document.getElementById(aID).contentDocument; } else { return document.frames[aID].document; } } function GetHeight(ID){ if (document.height) { document.getElementById(ID).style.height = getIFrameDocument(ID).height +20 +"px" ; }else{ document.getElementById(ID).style.height = getIFrameDocument(ID).body.scrollHeight +20 +"px"; } } //iframeクッキー var cook_key = "iframesrc"; window.onload = function(){ } function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } user_pref("dom.disable_window_open_feature.scrollbars", true); ************************************************************************** この状態で現在、困っているのは  a.htmlを表示している状態で更新を押すと、iframe内が404になることです。 b.htmlなどで更新を押すと、b.htmlが表示されたままだし、 d.htmlなどで更新を押すと、a.htmlが表示されます。 解決方法教えてくださいっ。

  • インラインフレームでのクッキーについて

    インラインフレームをサイトで使用しているのですが、 インラインフレームって、更新を押すと、最初に指定したページ  <iframe src=a.html></iframe> だと a.html に戻ってしまうじゃないですか。 それをクッキーを使用して、更新を押しても現在見ているページを表示したいのですが。(クッキーでできるのかな?) できますでしょうか?教えてください。 また、別の方法でも、上記が可能ならば、教えてください。お願いします。 iframe名を、fffff  IDを、fffffid iframeをおくページを、index.html iframeで最初に表示されるページを、a.html リンクでiframe内に表示されるページを、b.html としておきます。

  • iframeから別ページのiframeへのリンク

    iframeに関する質問です。 iframe内リンク から別ページの iframe 内のアンカーへの移動は可能でしょうか? ======ページ構成は以下の通りです。====== A_01.html (親ページ) A_02.html (A_01のiframe (子) ページ) B_01.html (親ページ) B_02.html (B_01のiframe (子) ページ) ====================================== ======希望動作====== A_01.html 内に設置してある、iframe A_02.html のリンクをクリックし、 別ページでB_01.html 内に設置してある iframe B_02.html のアンカー先を 表示したいと思っております。 ==================== 色々と試してはいるのですが上手く行っておりません。 iframeの重複利用は避けたいのですが、色々な制限の為、やもえず使用しております。 何かアドバイスや方法がありましたら宜しくお願い致します。

  • IFRAMEとA NAMEについて 少しわかりにくいです

    index.html内にIFRAMEでA.htm<IFRAME SRC="A.htm#b"> というように載せた場合、 index.htmが一番上で表示されずに<A NAME="b">がある位置で表示されます。 例として index.htmは <title> <font>題名<br>×15個 <IFRAME SRC="A.htm#b></IFRAME><br>×15個 A.htmは <font>ああああああああ <br><br><br> <A NAME="b"> いいいいいいいい です。index.htmにアクセスした場合、"題名"の位置で表示されずインフレーム内の<A NAME="b">の位置が一番上で表示されます。つまりずれるので題名がみれなくなります。 ちょっとわかりにくいですが原因と対処方法を教えてください

    • ベストアンサー
    • HTML
  • iframeのurlをクリックで書き換えたい。

    <iframe id="map" src="https://A.co.jp" width="800" height="450"></iframe> <ul> <li><a href="https://B.co.jp">Bサイト</a></li> <li><a href="https://C.co.jp">Cサイト</a></li> </ul> iframeのURL「https://A.co.jp」を下のリンクをクリックすることで「https://B.co.jp」などに書き換えて表示を変更したいと考えています。 JavaScriptで可能と思うのですが、どのようにしたらいいのかわかりません。 よろしくお願いいたします。

  • iframe内からのリンク

    少々複雑ですいませんがお願いします。 ・index.htmlにname="contents"でiframeを設置 ・iframe内に先頭に戻るリンクを最下部に設置したい(ここでいう先頭はページ全体のトップ) ・上記リンクを押した際にiframe内は現時点のページのまま index.html ------------- <body> ヘッダー内容 <iframe src="フレーム内ページ.html"></iframe> + + + フレーム内ページ ----------- <body> <a name="top"></top> ページの内容 + + + このままだとフレーム内ページの先頭に飛ぶのは周知なので。 条件として、 ・CSSは使用可能。 ・javascriptは使えるが、使わないですむならその方が良い。 ・環境上jQueryは不可。 ・flash他は考えない。 カテゴリが異なるのかもしれませんが;よろしくお願いします。

    • ベストアンサー
    • HTML
  • IFRAME内のソースを別のIFRAMEにコピーする方法

    ページ内に二つのIFRAMEがあります。 IFRAME-A IFRAME-B IFRAME-Aに表示されるページのHTMLを、IFRAM-Bにコピーする事は可能でしょうか? srcのlocationをコピーするのではなく、HTMLを文字列としてコピーして、IFRAME-Bにも同じ内容を表示したく考えています。 使用するブラウザはIE6/7/8となります。 よろしくお願いします。

  • 複数の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
  • IFRAMEからのリンクについて

    AというページにIFRAMEのページが入っています。 そのIFRAMEのページからBというフレームページに ↓Bのフレームページ↓ -----------   |    | C | D  |   |    |   | *  | ----------- リンクするようにしたいのですが、 リンクといっても、Dの中の特定の場所*を表示するように したいのです。 わかりにくい質問かもしれませんが、わかる方がいたら 教えてください。

    • 締切済み
    • CSS