WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:更新するとおかしくなる…?

0:[投稿] まほら [2005/08/22 05:17 ][環境:IE6 ?]

以前にも質問させていただいたものです。
図々しくもまた投稿させて頂きます。

javascriptに関する質問です。
次のようなソースがあります。

***********************************************************
<HTML>

<HEAD>
<SCRIPT TYPE="text/javascript">
<!--
function f(n)
{
    var str = '';
    str += '<IFRAME FRAMEBORDER="0" SCROLLING="no" SRC="' + eval(n) + '.html" onload="this.height = this.contentWindow.document.body.scrollHeight;"></IFRAME><BR>';
    myIframe.document.body.innerHTML = str;
}
//-->
</SCRIPT>
</HEAD>

<BODY>
<IFRAME ID="myIframe" SRC="0.html" WIDTH="1000" HEIGHT="500"></IFRAME>
<FORM>
    <INPUT TYPE="button" VALUE="表示1" onclick="f(1);">
    <INPUT TYPE="button" VALUE="表示2" onclick="f(2);">
    <INPUT TYPE="button" VALUE="表示3" onclick="f(3);">
</FORM>
</BODY>

</HTML>
***********************************************************

実際のものよりかなり簡約化してありますが、基本的な構造は同じです。関数f(n)は、BODY内のインラインフレームに対して、その中身をinnerHTMLを使って"n.html"(n=1,2...)という名前のファイルを(またしてもフレームで)埋め込むように書き換えるものです。上の例ではnは3つのボタンで選んでます(最初が0で、1か2か3に変える)。

意味なく += を使っていたり、innerHTMLを使ってますが、元のスクリプトがそうじゃないとうまくいかないのでこうなってしまってます。

ここで、実際に3つのボタンを押してみるとエラー無しでちゃんと動きます。ただ、『更新』ボタンを押した後の1回だけ、なぜかちゃんと動いてくれません。具体的には、"表示i"のボタンを押した直後に更新ボタンを押し、そのまま"表示i"以外のボタンを押すとなぜか"表示i"の内容が表示されてしまう、(更新前に最後に表示していた内容が、更新後の最初の動作で表示されてしまう)というものです。

原因は何度も考えましたが、どうしてもわかりません。innerHTMLを使ってるせいで変になってると思うのですが…。どなたか原因がわかる方いらっしゃいましたらお答え頂けると幸いです。どうかよろしくお願いします。


1:[回答] 神崎 [2005/08/22 15:47 ]

編集前の内容がキャッシュに残ってませんか?
キャッシュを消してみてはいかがでしょうか。


2:[質問] まほら [2005/08/22 17:04 ]

神崎様、ご回答ありがとうございます。

キャッシュの存在を初めて知りました…。
情けない限りです。

色々調べて、
・IE(6)のオプションで、一時ファイルの設定で"ページを表示するごとに確認する"にマーク
・上のHEAD内に次の3文を入力(意味はあまりよくわかっていないです…)
 <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
 <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
 <META EQUIV="expires" CONTENT="0">
などといじくってみましたが…、結果は変わりませんでした…ToT
キャッシュが原因ではないのでしょうか?


3:[回答] 神崎 [2005/08/22 22:32 ]

上記のソースをコピーして作成したテスト環境では、
(Windows XP SP2、IE6.0)
「表示1」「表示2」「表示3」はありますが「表示i」がありませんので、何とも言えませんが、
当環境での動作検証結果です。

表示2ボタンを押し(iframeの中に2.htmlが表示される)たあと、ブラウザの更新ボタンを押して、改めて「表示1」を押すと、iframeの中に1.htmlが表示されています。

ブラウザのキャッシュを削除したあと、ブラウザの更新ボタンを押して、HTMLを読み直し、
表示1を押し(iframeの中に1.htmlが表示される)たあとブラウザの更新ボタンを押して表示2を押すと、iframeの中に2.htmlが表示されます。

ちゃんと動かないというのがどの様な状況かわかりませんが、私の環境では正常に動いていると思われます。

なお、0.html、1.html、2.html、3.htmlは、独自に作成しています。
例)
<html><body>0</body></html>


4:[質問] まほら [2005/08/23 03:52 ]

ご回答ありがとうございます。

表示iというのは表示1、2、3を総称していただけのつもりだったのですが、わかりにくくてすみません…。

正常に動作しているとみなせるのは、
『ボタンのいずれかを押したとき、その番号と同じ数字名のファイルがmyIframeの中にインラインフレームで表示されている』
ような場合です。

なので、神崎様の検証結果はすべて正常に動作していると思われます。しかもキャッシュを削除してもしなくても正しく動いている気が…。

【自分がやるとこう↓なります】
表示2ボタンを押し(iframeの中に2.htmlが表示される)たあと、ブラウザの更新ボタンを押して、改めて「表示1」を押すと、iframeの中に2.htmlが表示されてしまいます。
それ以降はどのボタンを押しても正常に動きます。
ちなみに、更新後2回目以降の操作では、ボタンを押す毎にブラウザの一番下の部分のロードの進行具合を現すバーが一瞬表示されるのですが、1回目の操作だけは一瞬たりとも表示されません。つまり読み込んでないということでしょうか…?

IEの設定は初期状態から何も変更してはいないと思うのですが…、自分の結果だけ変になるのはなんででしょう?
何か他の設定とか、ソフトが足りないとか…(*o*;≡;*o*)
でも、とりあえず正常に動いたということは、スクリプト自体に問題はないということになるでしょうか?

なんだかまとまりのない質問になってしまいました…すいません。


5:[回答] 神崎 [2005/08/23 06:20 ]

> 自分の結果だけ変になるのはなんででしょう?
よくあるのは自分が作成したスクリプトと、BBSに書いたスクリプトの内容が違う場合。

説明に不必要な部分にエラーなどがあると、
必要な部分を取り出してBBSに書き込む際、そのエラーの部分は消えますので、他の人が検証すると、想定どおりに動くことになります。

また、BBSのフォームに直接スクリプトを書く人もいますが、
その場合も、本来のスクリプトと異なることが多いですね。

BBSに投稿したスクリプトをそのままコピーし直して、HTMLファイルを作り直してみるとどうなりますか?
(または既存のファイルと比較すると、何か違いがありませんか?)


6:[質問] まほら [2005/08/23 17:20 ]

ご回答ありがとうございます。
遅くなってしまってすみません。

0のスクリプトをコピーして新たにHTMLをつくり、実行してみましたが、やはり4の自分の結果と同じになりました。

また、0のスクリプトは自分が使っているファイルをそのままコピペしただけなので、2つに違いはないと思われます。(実際確認してみましたが、違いはありませんでした。)

スクリプト以外の問題ということになるのでしょうか?


7:[回答] low_kick [2005/08/23 17:54 ]

<BODY onload="myIframe.src='0.html'">
としてみてはどうですか?


8:[質問] まほら [2005/08/23 20:04 ]

low_kick様、ご回答ありがとうございます。

<BODY onload="myIframe.src='0.html'">
としても変化がなかったので、
<BODY onload="document.getElementById('myIframe').src='0.html';">
と書き直した所、正常に動作しました!

こ、これは一体どういう原理でしょうか? ('o';≡;'o')
ご存知でしたら教えていただけないでしょうか?

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World