• 締切済み

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タグ)に入れればいいですよね?

みんなの回答

  • leap_day
  • ベストアンサー率60% (338/561)
回答No.3

こんにちは >一回で表示させるように設定していたのですが、二度表示されます。 それはですね、<iframe>記述の<script>で<iframe>を一度表示してからwindow.onloadの処理でiframeのurlを変更させているからです 一度で済ましたいのであれば window.onload=function(){ } 内は Clock(); Ref(); のみにして iframeの<script>の方を <script type="text/javascript"><!-- var cook_key = "iframesrc"; if(cook_src) document.getElementById('iframeid').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; } } var file = cook_src? cook_src[1] : 'test2.html'; document.write('<iframe class="tmain" src="',file,'" id="iframeid" name="iframename" frameborder="0" scrolling="no" height="1500"></iframe>') document.getElementById('iframeid').src = cook_src ? (cook_src[1] ? cook_src[1] : 'test2.html') : 'test2.html'; function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } //--></script> とすればいいです(変更しないといけない場所は前の回答と同じです) ・・・流石に2個前の質問まではチェックしていなかったですね~~ そちらの方に書いてありました(Ano.3 下のほう) ※IE,Opera,Firefoxで試したところ、IE,Operaは希望通りのようなのですがFirefoxでtest3.html(そちらで言うところのb.html)を表示したときに更新したらtest2.html(a.html)にできないみたいですがこちらは解決法が分からないので新しく聞いてみて下さい そのまま表示されるのでクッキーが効いていないかキャッシュの関係なのかな?とは思いますが・・・

yamamcks
質問者

補足

ありがとうございますっ!! 一回で表示されるようになりました。 本当、手間かけてすみません。 無駄にスレを分けてしまったもので・・・。 すみませんが、前からの状況なのですが、 a.htmlを表示している時に更新すると404になります。 直せないでしょうか・・・。解決法教えてください。 FireFoxの方、了解しました。いろいろありがとうございます

すると、全ての回答が全文表示されます。
  • leap_day
  • ベストアンサー率60% (338/561)
回答No.2

こんにちは おそらくこうしているであろうという推測で試してみましたが、機能させられるようです <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <title>test</title> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <link rel="stylesheet" type="text/css" href="/standard.css"> <script type="text/javascript" src="standard.js"></script> <script><!-- function GetHeightForIndex(){ GetHeight("iframeid"); } //--></script> </head> <body> <table> <tr> <td onClick="iframename.location.href='test2.html',setCook('')" style="cursor:pointer;">ここのセルクリックでtest2.html</td> <td> <a href="test3.html" onclick="setCook('')" target="iframename">test3.html(iframe表示)</a> </td><td class="white" width="1"> <div id="line"></div> </td><td class="white"><center> <a href="test4.html" onclick="setCook(this.href)" target="iframename">test4.html(iframe表示)</a> </td></tr> </table> <table> <tr> <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] : 'test2.html'; document.write('<iframe class="tmain" src="',file,'" id="iframeid" name="iframename" frameborder="0" scrolling="no" height="1500"></iframe>') function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } //--></script> <noscript> <iframe class="tmain" src="test2.html" id="iframeid" name="iframename" frameborder="0" scrolling="no" height="1500"></iframe> </noscript> </td></tr> </table> </body> </html> [standard.js] var cook_key = "iframesrc"; window.onload = function(){ if(cook_src) document.getElementById('iframeid').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('iframeid').src = cook_src ? (cook_src[1] ? cook_src[1] : 'test2.html') : 'test2.html'; Clock(); Ref(); } function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } function Clock() { } function Ref() { } おおよそこんな感じで作ってますか? 『変換させる部分』 test2.html → a.html (4ヶ所(index.html) 2ヶ所(standard.js) test3.html → b.html (2ヶ所(index.html) test4.html → c.html (2ヶ所(index.html) iframename → iframeのname (5ヶ所(index.html) iframeid →iframeのid (3ヶ所(index.html) 2ヶ所(standard.js) 見落としがあるかもしれませんがこの5種類を変えればそちらでも動くと思います (1)上記のものをみてもらえれば分かるかと思いますが window.onload = function() { ~~~ Clock(); } のような感じです body onload=""を消さないと(記述された順番によりますが)こちらが優先されて(下に書かれたonloadが優先)window.onload=function()が無視されてしまいます 極端な例を言えば今の状態(もう変更されてるかもしれませんが)で <script language="JavaScript" src="/standard.js"></script> を<body>内に移動させたとするとClock(); Ref(); が機能せずクッキー表示はされると思います (2)(3)こちらの認識不足のようでこのままでも表示されるようです すみません (4)これで全部です。そちらで言うところのstandard.jsが<script>内、残りがindex.htmlの<body>内になります (5)上のほうは何のことなのか分からないのですが・・・ oやnは質問サンプルにあるような function setCook(arg) の『arg』と同じですこちらで勝手に決めたものです(ようするになんでも良かったのです(笑) (6)(<script>内) ID( ifr ) (3ヶ所)とURL( a.html )(1ヶ所)を変えて<div>以降(urlとiframeのID( ifr )を変えて)を貼り付けているなら多分できるはずだと思うのですが・・・ (7) <a href="javascript:void(0);" onclick="save('a.html')">a.html</a> <a href="javascript:void(0);" onclick="del('b.htm')">b.html</a> もしくは(以下、動作未確認) <a href="a.html" target="iframeのname" onclick="save('this.href')">a.html</a> <a href="b.html" target="iframeのname" onclick="del()">b.html</a> として function save(n) { },function del(n) { }内の document.getElementById('ifr').src=n; を削除して  function del(n){ } を function del() { } とすれば良いかなと思う 長々となりましたがID名やNAME名、onclickの値などちょこちょこっとしたところを間違っておられましたので(最大の要因は『body onload=""』です)その部分を修正すれば以前のものでも十分できますので(^^)

yamamcks
質問者

補足

<!DOCTYPE HTML PUBLIC "-//W3C 以降のタグを参考に設定すると無事動作しました。 しかし、 iframe記述のscript  <script type="text/javascript">  var cook_key = "iframesrc"  ~  </noscript> で、一回で表示させるように設定していたのですが、二度表示されます。 えっと、 iframeでb.html(クッキー有)を表示していて更新をおすと、b.htmlが表示されたままになるのですが、 一度b.htmlが開かれてから読み直したような感じで再びb.htmlが表示されるのです。 以前はiframe記述のscriptで一回で出ていたのですが、 できなくなりました。有効にするにはどうすればよいでしょうか

すると、全ての回答が全文表示されます。
  • leap_day
  • ベストアンサー率60% (338/561)
回答No.1

こんにちは ちょっと見た感じで気になる点は ・window.onload=function() と body onload="" <iframe>記述の際の<script></script> の共存ですかね? どれもonload時の処理になると思うので最終的には<iframe>記述の<script>しかonload時に処理されていないのではないかな?と思います(多分) Clock(),Ref()をwindow.onload内に入れて(Clock(),ではなくてClock();Ref();だと思います) <iframe>記述の<script>内を function ***() { } としてその***();をwindow.onload内に入れてみたらどんなですかね? あと cursor:hand; よりは cursor:pointer; のほうがいいかな? P.S.の回答は はい だと思います ほぼ完成していたので回答は控えたのですがこういった方法ではどうでしょうか? save()でクッキーの保存、del()でクッキーの削除、isizech()でiframe可変、window.onloadでクッキーURLの表示といった感じです(^^) save()内 the Date=X; がクッキー保存期間(X日)です 多分大丈夫だとは思いますが・・・ buttonにしてますがリンクでもできると思います <iframe>にonloadがありますがこれはページのonloadではなく<iframe>内のページのonloadになります どちらにしてもonloadを使用しますので多少のタイムラグがあります window.onload=function() { }内最後に Clock(); Ref(); と追加してみてください <script type="text/javascript"><!-- window.onload=function() { theData = ""; theName = "URL="; theCookie = document.cookie+";"; start = theCookie.indexOf(theName); if (start != -1) { end = theCookie.indexOf(";",start); theData = unescape(theCookie.substring(start+theName.length,end)); } if(theData == "") { theData = "a.html"; } document.getElementById("ifr").src = theData; /*ここに追加:*/ } function save(n) { theDay = 1; setDay = new Date(); setDay.setTime(setDay.getTime()+(theDay*1000*60*60*24)); expDay = setDay.toGMTString(); document.cookie = "URL="+n+";expires="+expDay; document.getElementById('ifr').src=n; } function del(n) { theName = "URL"; document.cookie = theName + "=;expires=Thu,01-Jan-70 00:00:01 GMT"; document.getElementById('ifr').src=n; } function isizech(o) { o.height = 1; o.width = 1; var oDoc = o.contentWindow.document; o.height = Math.max(oDoc.getElementsByTagName('html')[0].scrollHeight, oDoc.body.scrollHeight) +50; o.width = Math.max(oDoc.getElementsByTagName('html')[0].scrollWidth, oDoc.body.scrollWidth) +50; } //--></script> <div> <input type="button" value="a" onclick="save('a.html')"> <input type="button" value="b" onclick="save('b.html')"> <input type="button" value="c" onclick="del('c.htm')"> </div> <iframe src="a.html" id="ifr" name="ifrs" onload="isizech(this)"></iframe>

yamamcks
質問者

補足

本当に初心者で・・・いくらか分からない部分がありました。 試したりしたのですが、うまく動作しませんでした。 ************************************************************************************************ ************************************************************************************************ Clock(),Ref()をwindow.onload内に入れて(Clock(),ではなくてClock();Ref();だと思います) <iframe>記述の<script>内を function ***() { } としてその***();をwindow.onload内に入れてみたらどんなですかね?      ************************************************************************************** ここを変更すればいいんですよね?上より上記は説明と受け取りました。 (1)Clock(),Ref()をwindow.onload内に入れて~だと思います) Clock(),Ref()を standard.js内のwindow.onload の中に入れるのですよね? window.onload = ここにいれるのか fiction(){ window.onload = fiction(){ ~~~~ここにいれるのか} あと、<body>内のonloadは消すんですよね? (2)<iframe>記述の<script>内 <noscript><iframeタグ></iframe></noscript>の上にあるscriptの事ですよね?(一応確認) (3)function ***() { } としてその***();をwindow.onload内に入れて (2)の位置のタグをfunction ***() { }で囲むのでしょうか? <scrip>function Cookie(とします)() { <scrip>の下の行~</script>の上の行 }</script> とすればよいのでしょうか? ************************************************************************************************ (1)~(3)を、自分の判断で、やったのですが、index.htmlのiframeの場所が白紙の状態になってしまいました。 ************************************************************************************************ ************************************************************************************************ ほぼ完成していたので~   以降      ************************************************************************************** とりあえず、<script type="text/javascript"><!-- より上は説明っぽかったので、 <script type="text/javascript"><!--以降をコピって、idの部分と、a.htmlのurlを変更してstandard.jsに貼り付けました。 (4)上記を貼ると・・・ この際、index.html内のiframe記述の<script>は消すんでしょうか? (5)function ***(*)このやり方を、ほかのjavascriptに使用できますかね? その場合、function ***(*){}の{}内に元のscriptが入るようにすればいいんですかね? あと、(*)この中のnやoって何でしょうか。 (6)<input type="button" value="a" onclick="save('a.html')">以降を貼ったのですが、クリックしても何も表示されません。(これは、iframe内が白紙の状態になっているから出来ていないだけかもしれません) (7)buttonにしてますがリンクでもできると思います とありますが・・・ <input type="button" value="a" onclick="save('a.html')">のタグを、 <a ~>形式でやるにはどうすればよいのでしょうか。 ************************************************************************************** ************************************************************************************** 色々と丁寧に説明していただきありがとうございます。 自分の知識ではまったく解決できないものばかりです・・・。 もうしばらくお力かしてください。

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

関連するQ&A