プロが教えるわが家の防犯対策術!

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

iframe名を、fffff  IDを、fffffid
iframeをおくページを、index.html
iframeで最初に表示されるページを、a.html
リンクでiframe内に表示されるページを、b.html としておきます。

A 回答 (3件)

オンロードタイミングで行ってるので、これでも状況によっては一瞬 a.htmlが表示されます。


が、一応すぐ消して空になるので、試してみてください。
<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] : 'a.html';
}
function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; }
</script>


他にもJavaScriptからiframeを挿入したりcreateする等もありますが、何を使うにしてもJavaScriptOFFの場合の事を考えて先にiframeを書き込んでおく事を前提にした場合はオンロードタイミングで実行になるので状況によってa.htmlやブランクが表示される可能性はあります。

『一瞬でも表示させたくない』を全てに優先させるのであれば
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>
    • good
    • 0
この回答へのお礼

ありがとうございます。参考になりました。

お礼日時:2008/01/17 16:43

とりあえずサンプルです。


iframe表示用リンクが複数あるとして。


<script type="text/javascript">
var cook_key = "iframesrc";
window.onload = function(){
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; }
}
if(cook_src){ document.getElementById('fffffid').src = cook_src[1]; }
}

function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; }
</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>
<iframe id="fffffid" name="fffff" src="./a.html"></iframe>


次回訪問の時の事は書いてないのでクッキーの有効期限を付けていません。
ブラウザを終了させたら期限切れです。

この回答への補足

回答ありがとうございます!
サンプルどおりに設定すると、ちゃんとクッキー出来ました。
しかし、「iframeで最初に表示されるページa.html」が一度表示されてから、
「リンクでiframe内に表示されるページb.html」が表示されるようになります。
a.htmlを表示させずに、b.thmlをすぐに表示するにはどうすればよいでしょうか。
教えてください。

補足日時:2008/01/16 17:18
    • good
    • 0

自ドメイン内でのiframeコンテンツとして、


fffffidのcontentWindow.location 属性をリンク命令を押すたびに、書き込み(onClickなどでいいかと思います。)、ページロードの際クッキーを読み出せばできると思います。
簡単にテストしてみましたがヤハリできてました。

この回答への補足

回答ありがとうございます。
javascript超初心者なもので、サンプルなど記載してもらわなければ、
全然わかりません。申し訳ないです。
よろしければ、サンプル等、記載よろしくおねがいします。

補足日時:2008/01/16 17:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!